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

नोड प्रॉमिस में एसिंक्स मोंगो क्रियाओं का सही संचालन

चूंकि MongoDB ड्राइवर के सभी अतुल्यकालिक संचालन पहले से ही एक वादा लौटाते हैं, इसलिए आपको new Promise का उपयोग नहीं करना चाहिए बिल्कुल, लेकिन एक वादा श्रृंखला स्थापित करें:

function updateDatabase(name, token) {
  let database;
  return MongoClient.connect(MONGODB_URL).then(db => {
    database = db;
    return database
      .collection("testCollection")
      .update({ name }, { $pull: { tokens: { $in: [token] } } });
  })
  .then(() => {
    return database.collection("log").insert({
      name,
      token
    });
  })
  .then(() => {
    database.close(true);
  })
  .catch(err => {
    database.close(true);
    throw err;
  });
}

मैं समझता/समझती हूं कि आप database pass पास करना चाहते हैं अगले then . के लिए एक तर्क के रूप में , लेकिन आप इस समस्या का सामना करेंगे कि यह catch . में उपलब्ध नहीं होगा हैंडलर। एक समाधान एक फ़ंक्शन-स्कोप्ड वैरिएबल का उपयोग करना है जो कनेक्शन खोलने के बाद असाइन किया जाता है, जैसा कि ऊपर दिया गया कोड करता है।

अगर आपको यह पसंद नहीं है, तो आप .then . के अंदर एक नई वादा श्रृंखला बना सकते हैं MongoClient.connect . के लिए हैंडलर :

function updateDatabase(name, token) {
  return MongoClient.connect(MONGODB_URL).then(database => {
    return database
      .collection("testCollection")
      .update({ name }, { $pull: { tokens: { $in: [token] } } })
      .then(() => {
        return database.collection("log").insert({
          name,
          token
        });
      })
      .then(() => {
        database.close(true);
      })
      .catch(err => {
        database.close(true);
        throw err;
      });
  });
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 'ऑब्जेक्ट आईडी ()' रैपर को शामिल किए बिना मोंगो ऑब्जेक्ट आईडी .toString को कैसे परिवर्तित करें - केवल मूल्य?

  2. मूल फ़ील्ड निर्दिष्ट किए बिना नेस्टेड फ़ील्ड को सीधे क्वेरी कैसे करें?

  3. MongoFactoryBean और SimpleMongoDbFactory के बीच अंतर

  4. उपयोगकर्ता रेटिंग के लिए स्कीमा - कुंजी/मान डीबी

  5. mongoDB updateMany upsert true के साथ और $in जहां स्थिति में