2016-08-25 4 views
0

Mongo Javaドライババージョン3.2.1をMongoDB 3.0.12に対して使用しています。Mongoドライバアップデートすべてのドキュメントを更新していません

MongoCollection.updateMany(Bson filter, Bson update)を呼び出すと、予想されるすべての文書が変更されたという結果が返されますが、文書の一部のみが実際に更新されたことが示されます。私は複数の書き込み懸念に試してみた

:ジャーナルに、

など、任意のアイデアを認めましたか?

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

を更新:それはあるので、これは私が期待される方法を動作していない

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

あなたが更新を意味する場合は、置換を意味する場合は、 '$セット'演算子を使用しないでください。 –

答えて

0

:また、MongoDBの3.2.9に 直接アクセスコールを発生する。ここ

は、プロファイル結果であります最初の時刻を更新するのは、各タイムシートごとに最初に見つかるlineItemです。

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

位置$演算子は、更新クエリ文書の最初のマッチのためのプレースホルダとして機能していることを覚えておいてください。

現在、埋め込みアレイ内のすべてのアイテムを更新する機能はありません。

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

関連する問題