複数のサブ文書の更新クエリを一度に作成したいと思います。私はすべてのサブ文書のステータスをパッシブに設定します。ここでは、クエリで指定した条件を満たしています。MongoDBで複数のサブ文書を更新またはクエリ
db.deduplications.update(
{ $and: [
{ "_id": "189546D623FC69E3B693FDB679DBC76C" },
{ "DeviceVersionPairs.DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") },
{ "DeviceVersionPairs.CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") },
{ "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") },
{ "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }
] },
{ $set: { "DeviceVersionPairs.$.Status": "passive" }});
上記のクエリでは、正確に1つのサブ文書が見つかると、必要に応じて更新が行われます。しかし;
db.deduplications.update(
{ $or: [ { $and: [
{ "_id": "189546D623FC69E3B693FDB679DBC76C" },
{ "DeviceVersionPairs.DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") },
{ "DeviceVersionPairs.CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") },
{ "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") },
{ "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }
] } ,
{ $and: [
{ "_id": "189546D623FC69E3B693FDB679DBC76C" },
{ "DeviceVersionPairs.DeviceId": ObjectId("56dfe1356caaea14a819f1e4") },
{ "DeviceVersionPairs.CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") },
{ "DeviceVersionPairs.CloudFileId": ObjectId("583fb539e015b8a53fb71872") },
{ "DeviceVersionPairs.VersionId": ObjectId("583fb4ca6e7f331874213584") }
] } ] },
{ $set: { "DeviceVersionPairs.$.Status": "passive" }});
私はまたはでクエリセグメントを移入し、それがエラーを与える他の項目を追加します
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "The positional operator did not find the match needed from the query. Unexpanded update: DeviceVersionPairs.$.Status"
}
})
を私はここで何をしないのですか?
あなたは_id = "189546D623FC69E3B693FDB679DBC76C"のサブドキュメントを更新したいと思いますが、DeviceIdはクエリの2つですが他のサブドキュメントは更新しませんか? –
私はそう思います。他の '_id'が'または 'レベルに存在する可能性があり、すべてのサブ文書がすべての' _id'の更新される必要があるわけではありません。 –
downvoteの理由は何ですか?実際にはここに来て、 '$'位置演算子が複数のサブ文書と一致しないことを知ることができます。これはコミュニティにとって有益なことではありませんか? –