簡體   English   中英

Mongo驅動程序更新很多不更新所有文檔

[英]Mongo driver updateMany not updating all documents

針對MongoDB 3.0.12使用Mongo Java驅動程序3.2.1版。

調用MongoCollection.updateMany(Bson filter, Bson update)返回一個結果MongoCollection.updateMany(Bson filter, Bson update)該結果顯示所有期望的文檔均已修改,但是實際上僅更新了一部分文檔。

我已經嘗試過多個寫入問題:Journaled,ACKNOWLEDGED等

有任何想法嗎?

這是配置文件結果:

{ "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" : "" }

更新:在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

這無法按我預期的方式工作,因為它僅更新了它為每個時間表找到的第一個lineItem

https://docs.mongodb.com/manual/reference/operator/update/positional/#up。 小號

請記住,位置$運算符充當更新查詢文檔的第一個匹配項的占位符。

當前不存在更新嵌入式陣列中所有項目的功能。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM