Использование 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
Сообщение фактический призыв к MongoDB, а не абстрактно-код. иначе нет идеи действительно – Rahul
@Rahul Спасибо - отправлено –
Если по обновлению вы имеете в виду замену, то не используйте оператор '$ set'. –