Update expects 3 argument arrays Вы только прошли один
.. Во-первых, вы включили опции как часть массива $set
. Они должны быть переданы в качестве отдельного аргумента после предложения обновления.
Кроме того, у вас нет критериев соответствия (т. Е. Инструкции запроса, чтобы выбрать, какие элементы необходимо обновить). При использовании upsert и $set
новый элемент будет создан с полями из обоих массивов (see the relevant documentation).
И, наконец, если вы не указали значение для _id
, Mongo сгенерирует его для вас.
Если, например, вы хотите, чтобы соответствовать на основе 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
поля будут обновлены на первом согласовании object (для обновления нескольких записей вам нужно указать 'multiple'=>true
в вашем массиве параметров). Если ничего не соответствует, новая запись будет вставлена:
- Сгенерированного
_id
- Всех значений критериев соответствия (т.е.
organization
)
- Всех значений оператора обновления (т.е.
purch_code
и contentname
)
Только что заметил, что ваш вопрос отмечен как 'mongodb', но все ваши имена переменных содержат' mysql'. Если вы не выполняете миграцию между БД или б) это ссылки на материал, который хранится отдельно в БД MySQL, я бы переименовал их. Кроме того, я предлагаю вам отредактировать заголовок вашего вопроса, чтобы указать, какой тип БД вы фактически используете. – cyfur01
@ cyfur01 Вы правы, vars предопределены вашим MySQL_, так как я беру их из двух MySQL-запросов и пытаюсь активировать их в mongo. Я понимаю путаницу, но они просто имена и используются только для этой цели и только в этом скрипте. Я беру vars из таблиц WP WooCommerce и копирую их приложение, которое я разработал против mongodb. – Dennis