MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मौजूदा दस्तावेज़ में ऐरे सम्मिलित करें

यहां आपके कोड में कुछ चीजें गलत हैं। सबसे पहले और सबसे महत्वपूर्ण बात यह है कि आप अभी एक "async" वातावरण में चल रहे हैं और आपको कुछ चीजों को करने के तरीके के बारे में सोच बदलने की जरूरत है।

आपका पिछला PHP कोड "ब्लॉकिंग" है, जिसका अर्थ है कि कोड की अगली पंक्ति पर जाने से पहले कोड की प्रत्येक पंक्ति को पूरा करना होगा। इसमें डेटाबेस सर्वर द्वारा अपडेट करने और प्रतिक्रिया वापस करने की प्रतीक्षा करना शामिल है।

आप बुनियादी नियंत्रण लूप का उपयोग उनके अंदर के कार्यों के साथ नहीं कर सकते हैं जो अतुल्यकालिक रूप से प्रदर्शन करते हैं। इसके बजाय आपको कुछ ऐसा चाहिए जो लूप के अगले पुनरावृत्ति को कॉल कर सके (या कम से कम सिग्नल कि एक पुनरावृत्ति पूर्ण हो गया है) एक बार एसिंक्रोनस फ़ंक्शन "अपडेट" वास्तव में परिणाम लौटाता है।

यहां दूसरा बिंदु यह है कि "कुछ भी अपडेट नहीं किया गया" क्योंकि आपने फ़ंक्शन को यह नहीं बताया कि क्या अपडेट करना है या मिलान किए गए दस्तावेज़ को किसके साथ अपडेट करना है।

निम्नलिखित आपके मूल PHP लिस्टिंग के अनुरूप है, लेकिन "async" विधियों के लिए समायोजित भी async.eachSeries लूप नियंत्रण के लिए async से पुस्तकालय:

async.eachSeries(
    tables,
    function(table,callback) {
        var tablename  = table.tablename;
        delete table.tablename;   // just remove the key rather than re-construct
        OutAccept.update(
            { "tablename": tablename },
            { "$push": { "inventar": table } },
            function(err,numAffected) {
                console.log( numAfftected ); // tells you how many are updated or nothing
                callback(err)
            }
        );
    },
    function(err) {
       // comes here on completion of all array items
    }
);

.findOneAndUpdate() इसके बजाय कमांड उस दस्तावेज़ को लौटाता है जिसे संशोधित किया गया था और संशोधनों के साथ केवल तभी जब आप उनसे { "new": true } मांगते हैं

async.eachSeries(
    tables,
    function(table,callback) {
        var tablename  = table.tablename;
        delete table.tablename;
        OutAccept.findOneAndUpdate(
            { "tablename": tablename },
            { "$push": { "inventar": table } },
            { "new": true },
            function(err,doc) {
                console.log( doc ); // shows the modified document
                callback(err)
            }
        );
    },
    function(err) {
       // comes here on completion of all array items
    }
);

यदि आप एक साथ कई सरणी तत्व जोड़ना चाहते हैं, या यदि आपके पास सीधे एक सरणी में एक भी तत्व है तो $each संशोधक से $push :

var inventor =  [
    {
        "ean": "2",
        "name": "name2",
        "runtime": "0",
        "art": "null",
        "marker": "null",
        "stammkost": "null",
        "accepted": "0"
    },
    {
        "ean": "1",
        "name": "name1",
        "runtime": "0",
        "art": "null",
        "marker": "null",
        "stammkost": "null",
        "accepted": "0"
    }
];


OutAccept.update(
    { "tablename": tablename },
    { "$push": { "inventar": { "$each": inventar } } },
    function(err,numAffected) {
       // work in here
    }
);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला स्कीमा संदर्भ और अपरिभाषित प्रकार 'ऑब्जेक्ट आईडी'

  2. upsert का उपयोग करके जावा के साथ mongodb में com.mongodb.MongoException$DuplicateKey प्राप्त करना

  3. मोंगोडब एकत्रीकरण में सबस्ट्रिंग के साथ मिलान करें

  4. जर्सी एपीआई-रेस्ट में प्रतिक्रिया मोंगोडब ऑब्जेक्टडीबी

  5. AWS पर MongoDB की मेजबानी करते समय पूछने (और उत्तर देने) के लिए 10 प्रश्न