upsert скрипт не работает

Я пытаюсь встать на работу и не получаю результатов

У меня есть три переменные, которые я публикую перед этим сценарием. Если я обновлюсь, я получу результат, но я хочу отказаться и не получаю результатов.

Вот мой код:

if(isset($_POST)){
if($array){
$doc = $collection->update(
array(
'$set' => array(
'_id' => new MongoId(),
'organization' => $mysql_org_name,
'purch_code' => $mysql_purch_code,
'contentname' => $mysql_order_item_name,
array('upsert' => true)
)
)
);
}
}

1

Решение

Обновление ожидает 3 массива аргументов. Вы только прошли один.

Во-первых, вы включили ваши варианты как часть $set массив. Они должны быть переданы в качестве отдельного аргумента после условия обновления.

Кроме того, у вас нет критериев соответствия (т. Е. Оператор запроса для выбора элемента (ов) для обновления). При использовании upsert и $setновый элемент будет создан с полями из обоих массивов (см. соответствующую документацию).

Наконец, если вы не укажете значение для _idМонго сгенерирует один для вас.


Если, например, вы хотите сопоставить на основе organization поле:

if(isset($_POST)){
if($array){
$doc = $collection->update(
array('organization' => $mysql_org_name),
array(
'$set' => array(
'purch_code' => $mysql_purch_code,
'contentname' => $mysql_order_item_name,
)
),
array('upsert' => true)
);
}
}

Если это соответствует одной или нескольким записям, только purch_code а также contentname поля будут обновлены в первом подходящем объекте (чтобы обновить несколько записей, вам нужно будет указать 'multiple'=>true в вашем массиве опций). Если ничего не совпадает, новая запись будет вставлена ​​с:

  1. Генерируется _id
  2. Все значения критериев соответствия (т.е. organization)
  3. Все значения оператора обновления (т.е. purch_code а также contentname)
1

Другие решения

У вас есть переменная $, указанная в одинарных кавычках
‘$ set’ => array (

1

По вопросам рекламы [email protected]