बेशक यह करता है क्योंकि यह वही है जो आप इसे करने के लिए कह रहे हैं। आपके शीर्षक के बावजूद, "dot notation"<का कोई उपयोग नहीं है। /ए> यहाँ बिल्कुल। यदि आप मौजूदा संपत्तियों को अधिलेखित नहीं करना चाहते हैं तो यह निश्चित रूप से आप क्या करना चाहते हैं। $set
जहां जब तक आप यहां संरचना नहीं बदलते, मूल रूप से बेमानी है।
इसे "ठीक" करने के लिए, आपको अपने data
में हेरफेर करना होगा पहले वस्तु। इन पंक्तियों के साथ कुछ के साथ:
var newobj = {};
Object.keys( data ).forEach(function(key) {
if ( typeof(data[key]) == "object" ) {
Object.keys( data[key] ).forEach(function(subkey) {
newobj[key + "." + subkey] = data[key][subkey];
});
} else {
newobj[key] = data[key];
}
});
यह आपको और आउटपुट newobj
. में देता है इस तरह की संरचना:
{
"postcode" : "BV123456789BY",
"status.last_check" : 1413539153572,
"status.code" : "06",
"status.postnum" : "247431",
"status.date" : ISODate("2014-10-17T11:28:20.540Z"),
"status.text" : "06. Поступило в участок обработки почты (247431) Светлогорск - 1"
}
फिर निश्चित रूप से आप अपने सामान्य अपडेट के साथ आगे बढ़ सकते हैं और सब कुछ ठीक कर सकते हैं:
Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
if (err) console.log(err);
});
बेशक आपको अधिक नेस्टेड संरचना के लिए कुछ रिकर्सन की आवश्यकता होगी, लेकिन यह आपको सामान्य विचार देना चाहिए। डॉट नोटेशन जाने का रास्ता है, लेकिन आपको वास्तव में इसका उपयोग करने की आवश्यकता है।