2016-08-25 4 views
0

Использование Mongo Java Driver версии 3.2.1 для MongoDB 3.0.12.Обновление драйвера MongoMany не обновляет все документы

Вызов MongoCollection.updateMany(Bson filter, Bson update) возвращает результат, показывающий все ожидаемые документы, были изменены, однако только часть документов была фактически обновлена.

Я попытался с несколькими проблемами записи: Journaled, ПРИЗНАН и т.д.

Любые идеи?

Вот результат профиля:

{ "op" : "update", "ns" : "dev.timeSheet", "query" : { "lineItems.task" : ObjectId("53233e85e4b07f573f1d4466") }, "updateobj" : { "$set" : { "lineItems.$.task" : ObjectId("53233e85e4b07f573f1d446d") } }, "nscanned" : 0, "nscannedObjects" : 6733, "nMatched" : 248, "nModified" : 248, "fastmod" : true, "keyUpdates" : 0, "writeConflicts" : 0, "numYield" : 52, "locks" : { "Global" : { "acquireCount" : { "r" : NumberLong(53), "w" : NumberLong(53) } }, "MMAPV1Journal" : { "acquireCount" : { "w" : NumberLong(301) } }, "Database" : { "acquireCount" : { "w" : NumberLong(53) } }, "Collection" : { "acquireCount" : { "W" : NumberLong(53) } } }, "millis" : 50, "execStats" : { }, "ts" : ISODate("2016-08-25T18:17:16.025Z"), "client" : "127.0.0.1", "allUsers" : [ ], "user" : "" } 

Update: Также происходит в MongoDB 3.2.9 Прямые вызовы доступа:

db.timeSheet.find({'lineItems.task': ObjectId("53233e85e4b07f573f1d4466")}).count() 
126 
db.timeSheet.updateMany({'lineItems.task': ObjectId("53233e85e4b07f573f1d4466")}, {'$set': {'lineItems.$.task': ObjectId("53233e85e4b07f573f1d446d")}}) 
{ "acknowledged" : true, "matchedCount" : 126, "modifiedCount" : 126 } 
db.timeSheet.find({'lineItems.task': ObjectId("53233e85e4b07f573f1d4466")}).count() 
90 
+0

Сообщение фактический призыв к MongoDB, а не абстрактно-код. иначе нет идеи действительно – Rahul

+0

@Rahul Спасибо - отправлено –

+0

Если по обновлению вы имеете в виду замену, то не используйте оператор '$ set'. –

ответ

0

Это не работает так, как я ожидал, потому что только обновление первого lineItem, которое он находит для каждого листа времени.

https://docs.mongodb.com/manual/reference/operator/update/positional/#up.S

Помните, что позиционные $ оператор действует в качестве заполнителя для первого матча документа запроса обновления.

В настоящее время нет функции для обновления всех элементов встроенного массива.

https://jira.mongodb.org/browse/SERVER-1243