आपको यह त्रुटि मिली है
आपकी दूसरी क्वेरी एकाधिक उप-दस्तावेज़ . से मेल खाने के कारण . वर्तमान में स्थितीय ऑपरेटर . का उपयोग करना संभव नहीं है पोजिशनल ऑपरेटर का उपयोग करके एक सरणी में सभी आइटम्स को अपडेट करने के लिए।
इसलिए अपनी समस्या का समाधान करने के लिए आप इस प्रक्रिया का पालन कर सकते हैं
-
_id का उपयोग करके दस्तावेज़ ढूंढें और $elemMatch का उपयोग करके उप दस्तावेज़ ढूंढें और फिर
-
प्रत्येक उप दस्तावेज़ को अपडेट करें और दस्तावेज़ को फिर से सहेजें
इस तरह कोशिश कर सकते हैं:
db.deduplications.find(
{ $or: [ {
"_id": ObjectId("583fc558668bde730a460e11") ,
"DeviceVersionPairs":{
$elemMatch:{ "DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") ,
"CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") ,
"DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") ,
"DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }}
} ,
{
"_id": ObjectId("583fc558668bde730a460e11") ,
"DeviceVersionPairs":{
$elemMatch:{ "DeviceId": ObjectId("56dfe1356caaea14a819f1e4") ,
"CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") ,
"CloudFileId": ObjectId("583fb539e015b8a53fb71872") ,
"VersionId": ObjectId("583fb4ca6e7f331874213584") }}
} ]
}).forEach(function (doc) {
doc.DeviceVersionPairs.forEach(function (device) {
device.status = 'passive';
});
db.deduplications.save(doc);
});