これは失敗ではなく、仕様によるものです。
Bulk OperationsAPI の下 、ドキュメントの既存の値と一致する更新する値を指定した場合、その値は変更済みとしてマークされず、実際にはドキュメントの再書き込みを試みません。
簡単なテスト:
db.junk.insert({ "a": 1 })
WriteResult({ "nInserted" : 1 })
db.junk.update({ "a": 1},{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.junk.update({ "a": 2 },{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
db.junk.update({ "a": 2 },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.junk.update({ },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
バージョン2.6以降のMongoDBシェルのすべての操作は、実際には Bulk OperationsAPI<を使用しています。 / a> 。ここに、 WriteResult
が表示されます。
これは、これが起こっている証拠としてそのAPIから来ています。
したがって、ここでの短いケースは、変更する正しいタイプの「手動で挿入された」アイテムがある場合、それらは変更されないということです。