यह विफलता नहीं बल्कि डिजाइन द्वारा है।
बल्क ऑपरेशंस API के अंतर्गत , यदि आप अद्यतन करने के लिए एक मूल्य प्रदान करते हैं जो दस्तावेज़ के मौजूदा मूल्य से मेल खाता है तो इसे संशोधित के रूप में चिह्नित नहीं किया जाता है और वास्तव में दस्तावेज़ को फिर से लिखने का कोई प्रयास नहीं करता है।
सरल परीक्षण:
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 शेल में सभी ऑपरेशन वास्तव में बल्क ऑपरेशंस API<का उपयोग कर रहे हैं। /ए> . यहीं पर आपको WriteResult
दिखाई देता है
जो उस एपीआई से सबूत के तौर पर आता है कि ऐसा हो रहा है।
तो यहां संक्षिप्त मामला यह है कि यदि आपके पास "मैन्युअल रूप से सम्मिलित" आइटम हैं जो सही प्रकार के हैं जिन्हें आप संशोधित कर रहे हैं, तो वे परिवर्तित नहीं होते हैं।