javascript - Mongodb dot field update -
मेरे पास Mongo में निम्नलिखित स्कीमा है:
var OrderSchema = new schema ({postcode : स्ट्रिंग, ... स्थिति: {last_check: {type: date}, तिथि: दिनांक, कोड: स्ट्रिंग, पोस्टम: स्ट्रिंग, टेक्स्ट: स्ट्रिंग, वर्ग: स्ट्रिंग},});
मेरे पास डेटा सहेजने के लिए फ़ंक्शन है (पुराना तरीका टिप्पणी है):
फ़ंक्शन save_order (डेटा) {// var क्रम = नया ऑर्डर ( जानकारी); // var उतारडेटा = ऑर्डर। टू ऑब्जेक्ट (); // अपस्टर्टडेटा._id; // order.findOneAndUpdate ({postcode: order.postcode}, upsertData, {upert: true}, फ़ंक्शन (गलती) {ऑर्डर .update ({postcode: data.postcode}, {$ set: data}, फ़ंक्शन (गलती) {If (err)) console.log ('err');})}}
फ़ंक्शन में दिए गए डेटा का उदाहरण:
{postcode: 'बीवी 123456789 बीवाई', स्थिति: {अंतिम चेक: 1413539153572, कोड: '06', पदनाम: '247431', दिनांक: गुरु Oct 16 2014 09:52:00 GMT + 0300 (विस्टोइयेन युरोको (एलेटो)), पाठ: '06 Status.class सेट करने के लिए फ़ंक्शन ठीक काम करता है - यह स्थिति अधिलेखित नहीं करता है: फ़ंक्शन सेटबॉऑर्डर आईडी (आईडी, डेटा) {// डेटा = {'status.class': 'danger'} ऑर्डर। अपडेट ({_ id: id}, {$ set: data}, फ़ंक्शन (गलती) {if (err) console .log ('err');})}}
समस्या यह है कि जब मैं स्थिति को अपडेट करता हूं, तो status.class का मान गायब हो जाता है .. स्थिति को बिना स्थिति को कैसे अपडेट करना चाहिए status.code? आपका धन्यवाद।
निश्चित रूप से ऐसा इसलिए होता है क्योंकि यह वही है जो आप ऐसा करने के लिए कह रहे हैं। अपने शीर्षक के बावजूद, यहां बिल्कुल भी इसका कोई फायदा नहीं है। यह निश्चित रूप से है कि यदि आप मौजूदा गुणों को अधिलेखित नहीं करना चाहते हैं तो आप क्या करना चाहते हैं अभी आप संपूर्ण वस्तु की जगह ले रहे हैं, इसके बावजूद कि जब तक आप संरचना को बदल नहींते मूल तौर पर बेमानी हो।
इसे "ठीक" करने के लिए, आपको अपना डेटा
वस्तु पहले इन पंक्तियों के साथ कुछ के साथ:
var newobj = {}; ऑब्जेक्ट.कीज (डेटा) .इफ़ (फ़ंक्शन (कुंजी) {यदि (टाइपफ (डेटा [कुंजी]) == "ऑब्जेक्ट") {ऑब्जेक्ट। कीज़ (डेटा [कुंजी]) .for ईका (फ़ंक्शन (उपकुंजी) {न्यूोबजे [चाबी + "।" + उपकुंजी] = डेटा [कुंजी] [उपकुंजी];});} और {न्यूोबज [कुंजी] = डेटा [कुंजी];}});
यह आपको और आउटपुट को इस तरह से newobj
संरचना में देता है:
{"postcode": "BV123456789BY", " स्थिति "।" 1413539153572, "स्टेटसोड": "06", "स्टेटसपोस्टनम": "247431", "स्टेटसडेट": आईएसओडीएटी ("2014-10-17T11: 28: 20.540Z"), " Status.text ":" 06. पदोन्नति के लिए उबाऊ हो जाओ "(247431) Светлогорск - 1"}
फिर आप अपने सामान्य अपडेट के साथ आगे बढ़ सकते हैं और सब कुछ ठीक से प्राप्त कर सकते हैं:
आदेश। अपडेट ({"पोस्टकोड": newobj.postcode}, {"$ set": newobj}, फ़ंक्शन (गलती) {if (err) console.log (err);});
निश्चित रूप से आपको अधिक नेस्टेड संरचना के लिए कुछ रिकर्सन की आवश्यकता होगी, लेकिन इससे आपको सामान्य विचार देना चाहिए। डॉट संकेतन जाने का तरीका है, लेकिन आपको इसे वास्तव में उपयोग करने की आवश्यकता है।
Comments
Post a Comment