मैं अपने DB में निम्नलिखित दस्तावेज़ मिल गया है:एक संपूर्ण उप-दस्तावेज़ की जगह मोंगो डॉट नोटेशन क्यों है?
{
"_id": ObjectId("ABCDEFG12345"),
"options" : {
"foo": "bar",
"another": "something"
},
"date" : {
"created": 1234567890,
"updated": 0
}
}
और मैं डॉट अंकन का उपयोग options.foo
और date.updated
एक ही समय में अद्यतन करने के लिए है, इसलिए की तरह हैं:
var mongojs = require('mongojs');
var optionName = 'foo';
var optionValue = 'baz';
var updates = {};
updates['options.' + optionName] = optionValue;
updates['date.updated'] = new Date().getTime();
db.myCollection.findAndModify({
query : {
_id : ObjectId('ABCDEFG12345')
},
update : {
$set : updates
},
upsert : false,
new : true
}, function(error, doc, result) {
console.log(doc.options);
console.log(doc.date);
});
और इस में जो परिणाम :
{
foo : 'baz',
another : 'something'
}
{
updated : 1234567890
}
विशेष रूप से, मेरे पहले से मौजूद date.created
क्षेत्र clobbered हो रही है, भले ही मैं उसी हूँ एनजी डॉट नोटेशन।
यह केवल आंशिक रूप से क्यों काम कर रहा है? options
उप-दस्तावेज़ अपने पूर्व-मौजूदा डेटा को बरकरार रखता है (options.another
), date
उप-दस्तावेज़ क्यों अपने पूर्व-मौजूदा डेटा को बनाए रखता है?
मैंने उपरोक्त कोड चलाया और अपेक्षित आउटपुट '{foo: 'baz', दूसरा: 'कुछ'} {बनाया गया: 1234567890, अपडेट किया गया: 1486112116738}'। क्या आप सुनिश्चित हैं कि आपका डेटा/कोड उपर्युक्त है? – sheilak
100%। मैंने इसे 50 बार चेक किया होगा। यह कोई मतलब नहीं है, है ना? मेरे पास अन्य मॉड्यूल हैं जो सटीक तकनीक का उपयोग करते हैं और अपेक्षित परिणाम प्राप्त करते हैं, लेकिन किसी कारण से यह नहीं। एक एज-केस ढूंढने की उम्मीद है कि किसी और ने भाग लिया है। – AJB
मैं @sheilak से सहमत हूं यह मेरे लिए भी ठीक काम करता है। एजेबी क्या आप सही दस्तावेज़ और कोड चरणों को पोस्ट कर सकते हैं। – Avi