2015-08-20 3 views
0

Я пытаюсь обновить документы коллекции sale_order, если sale_order['orderId'] существует в temp_sale_order. Если он не существует в temp_sale_order, тогда новый документ будет создан в sale_order. (Upsert).Как использовать для цикла с обновлением mongodb

Но он создает только один документ.
Если я использую find вместо findOne. он выдает ошибку:

Ошибка:

uncaught exception: can't save a DBQuery object 

Мой запрос:

db.getCollection('sale_order').update(
     db.getCollection('sale_order').find({},{orderId:1}), 
     db.getCollection('temp_sale_order').findOne({},{orderId:1}),{upsert:true}); 

, что это правильный путь? Также как написать и использовать функцию в mongodb с вышеуказанным запросом?

ответ

1

По умолчанию метод update обновляет только один документ. Вы должны установить опцию "multi" : true для обновления сразу нескольких документов.

http://docs.mongodb.org/manual/reference/method/db.collection.update/

db.getCollection('sale_order').update(
     db.getCollection('sale_order').find({},{orderId:1}), 
     db.getCollection('temp_sale_order').findOne({},{orderId:1}),{upsert:true, multi:true}); 
+0

Это говорит 'мульти обновление работает только с $ operators'. Я читал об этом, но не мог понять, как использовать его с моим запросом. –

+0

У вас есть доступ к mongoshell для этого? – codename44

+0

Я использую mongodb на локальном сервере и использую robomongo для ide. Я использую этот запрос от robomongo –

Смежные вопросы