वैसे एक दृष्टिकोण से उत्तर "नहीं" है और उसके लिए एक बहुत अच्छा कारण है।
आम तौर पर बोलते हुए, मोंगोडीबी "अपडेट" ऑपरेशंस का उद्देश्य आम तौर पर "एकाधिक" दस्तावेज़ों में काम करना है, इसलिए जो भी मानदंड से मेल खाता है उसका अर्थ है। तो यहां सामान्य मामला यह है कि आपने या तो एकवचन में अपडेट करने के लिए कहा था या चयन द्वारा या तो अपडेट किया गया था या नहीं, इस पर निर्भर करता है कि कुछ भी मेल खाता था या नहीं।
"बल्क" संदर्भ में, बहुत कुछ एक ही बात लागू होती है, जिसमें या तो एक मानदंड मेल खाता था या नहीं, इस स्थिति में आपको nMatched
के लिए दिए गए मान प्राप्त होंगे और nModified
संभावित रूप से, क्योंकि इस बात की भी संभावना है कि एक "मिलान" दस्तावेज़ वास्तव में अपडेट नहीं किया गया है जहां संशोधित किया जाने वाला डेटा पहले से ही वह मान है जो संशोधन का लक्ष्य है।
nMatched
. के बीच वह अंतिम अंतर और nModified
यही मुख्य कारण है कि "आप विश्वसनीय रूप से ऐसा नहीं कर सकते" , चूंकि मेल खाने वाली हर चीज़ आवश्यक रूप से संशोधित नहीं होती है।
हालांकि आप एक अतिथि बना सकते हैं "अपरर्ट" क्रियाओं और वास्तविक "अपडेट" के बीच समझदारी के मामले में मूल्य। विख्यात अंतर के कारण यह 100% सटीक नहीं होगा, लेकिन मूल प्रक्रिया आपकी इनपुट सूची की तुलना getUpsertedIds()
से लौटाए गए मान से करना है। , जो एक वैध कॉल है।
वर्तमान में शेष विश्व के लिए ES6 सिंटैक्स को छोड़ कर:
var upserted = result.getUpsertedIds(); // get this from the bulk result
upserted = upserted.map(function(up) { return up._id }); // filter out just the _id values
var modifiedIds = edges.map(function(edge) { // get _id only from source
return edge.id;
}).filter(function(edge) {
return upserted.indexOf(edge) == -1; // and return only non upserted
});
जहां से .getUpsertedIds()
. का लौटाया गया परिणाम वस्तुओं की एक सरणी है जिसमें बल्क अपडेट से "इंडेक्स" स्थिति और उत्पन्न या आपूर्ति की गई _id
दोनों शामिल हैं "अप्सर्ट" का मान।
[ { index: 0, _id: 1 } ]
तो "क्या नहीं है" देखने के लिए अपनी इनपुट सूची को "अपसर्टेड" सूची से मिलाते हुए , मूल रूप से ऐसी चीजें लौटाता है जहां संभवतः बस संशोधित। निश्चित रूप से चेतावनी के साथ कि यदि मान पहले से ही संशोधन के समान था, तो यह वास्तव में कोई संशोधन नहीं था।
लेकिन जिस तरह से एपीआई काम करने के लिए है, वह उतना ही करीब है जितना आप पाने जा रहे हैं।