2017-01-24 5 views
5

मैं अपने 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 उप-दस्तावेज़ क्यों अपने पूर्व-मौजूदा डेटा को बनाए रखता है?

+0

मैंने उपरोक्त कोड चलाया और अपेक्षित आउटपुट '{foo: 'baz', दूसरा: 'कुछ'} {बनाया गया: 1234567890, अपडेट किया गया: 1486112116738}'। क्या आप सुनिश्चित हैं कि आपका डेटा/कोड उपर्युक्त है? – sheilak

+0

100%। मैंने इसे 50 बार चेक किया होगा। यह कोई मतलब नहीं है, है ना? मेरे पास अन्य मॉड्यूल हैं जो सटीक तकनीक का उपयोग करते हैं और अपेक्षित परिणाम प्राप्त करते हैं, लेकिन किसी कारण से यह नहीं। एक एज-केस ढूंढने की उम्मीद है कि किसी और ने भाग लिया है। – AJB

+0

मैं @sheilak से सहमत हूं यह मेरे लिए भी ठीक काम करता है। एजेबी क्या आप सही दस्तावेज़ और कोड चरणों को पोस्ट कर सकते हैं। – Avi

उत्तर

2

व्यवहार आमतौर पर वर्णित होता है जब वस्तु $set ऑपरेटर में पारित रूप { "data" : { "updated" : 1234567890 } } बजाय { "data.updated" : 1234567890 } की है, लेकिन मैं जावास्क्रिप्ट पर्याप्त में डॉट्स बताने के लिए है कि अगर जे एस के पक्ष में कारण हो सकता है के साथ परिचित नहीं हूँ।

इसके अलावा, यह समझा नहीं जाएगा कि यह data और options के साथ क्यों होता है।

यदि आप परिवर्तनीय updates में संग्रहीत ऑब्जेक्ट मुद्रित कर सकते हैं और इसे update फ़ील्ड में मोंगोडीबी को भेजा जाता है, तो यह बताएगा कि समस्या किस पक्ष (जेएस या मोंगोडीबी) है।

+0

क्या हो रहा है के उदाहरण के लिए एक बिंदु जो अन्य यात्रियों द्वारा मदद कर सकता है, लेकिन डॉट नोटेशन अपेक्षित परिणाम प्राप्त करना चाहिए, सिवाय इसके कि यह नहीं है। – AJB

1

मैं आपके कोड को एक परीक्षण वातावरण में पास करता हूं और उसी लाइब्रेरी का उपयोग करता हूं जिसका आप उपयोग कर रहे हैं। मूल ऑब्जेक्ट आईडी द्वारा क्वेरी के लिए mongojs लाइब्रेरी इस mongojs.ObjectId ("####") Can look the official documentation की तरह है।

findAndModify समारोह में कॉलबैक समारोह के लिए

, डॉक्स पैरामीटर एक सरणी तो मैं एक सरणी की तरह नेविगेट है enter image description here

ध्यान दें: [स्ट्रिंग को श्रेणीबद्ध करने के लिए मैं टेम्पलेट शाब्दिक का उपयोग] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)

सभी ठीक काम करें ...

संबंधित मुद्दे