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

नेस्टेड संग्रह के लिए Mongodb foreach दस्तावेज़ों को किसी अन्य संग्रह में अद्यतन/कॉपी करने के लिए

यदि आप पूरे संग्रह को अपडेट करने जा रहे हैं तो limit आपके कर्सर पर आपके वर्तमान कोड में आवश्यक नहीं है। आपको जो त्रुटि मिल रही है वह है mappingData products . में फ़ील्ड संग्रह में array नामक उप-दस्तावेज़ फ़ील्ड नहीं है . प्रश्न में आपके उदाहरण से, केवल title उप-दस्तावेज़ फ़ील्ड उपलब्ध है, और वह वही है जो आप चाहते हैं।

उत्पाद संग्रह के आकार के आधार पर, परिवर्तित दस्तावेज़ों को नए संग्रह में सम्मिलित करना आपके कार्यों को प्रभावित कर सकता है। आप नए अनियंत्रित बल्क इंसर्ट API जो आपके इंसर्ट ऑपरेशंस को थोक में भेजकर सुव्यवस्थित करता है, और इससे भी बेहतर, यह आपको इस बारे में वास्तविक प्रतिक्रिया देता है कि क्या सफल हुआ और क्या विफल रहा।

निम्नलिखित बल्क इंसर्ट एपीआई ऑपरेशन newcollection में सम्मिलित होगा वांछित डेटा संरचना जहां उत्पाद संग्रह कर्सर के भीतर नए दस्तावेज़ बनाए जाते हैं forEach() लूप, ब्रैकेट नोटेशन का उपयोग करके नए गुण बनाने के लिए। बल्क इंसर्ट में, आप 1000 के बैच में सर्वर को ऑपरेशन भेजेंगे जो आपको बेहतर प्रदर्शन देता है क्योंकि आप सर्वर को हर अनुरोध नहीं भेज रहे हैं, हर 1000 अनुरोधों में सिर्फ एक बार:

var bulk = db.newcollection.initializeUnorderedBulkOp(),   
    counter = 0;

db.products.find().forEach(function(doc) { 
    var document = {};
    if (doc.mappingData.title) document["title"] = doc[doc.mappingData.title];
    document["Manufacturer"] = doc.Manufacture;
    bulk.insert(document);
    counter++;
    if (counter % 1000 == 0) {
        bulk.execute();
        bulk = db.newcollection.initializeUnorderedBulkOp();
    }
});

if (counter % 1000 != 0) { bulk.execute(); }

उपरोक्त उदाहरण के साथ, आपको बल्क एपीआई ऑपरेशन से प्राप्त फीडबैक इस प्रारूप में होगा:

BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 2,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})

नया संग्रह क्वेरी करना db.newcollection.find() उपज देगा:

/* 0 */
{
    "_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
    "title" : "Toshiba Satellite Pro 4600 PIII800",
    "Manufacturer" : "Toshiba"
}

/* 1 */
{
    "_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
    "title" : "Apple Ihone",
    "Manufacturer" : undefined
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नोड.जेएस (मोंगोडीबी?) के लिए वितरित डेटाबेस के साथ इवेंट लॉगिंग

  2. Mongodb :जांचें कि क्या कोई बिंदु एक संग्रहीत बहुभुज के अंदर है

  3. स्प्रिंग मोंगो रिपोजिटरी स्लाइस

  4. बिना लेन-देन के MongoDB में कई से कई अपडेट

  5. जावा में एम्बेडेड मोंगोडीबी