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

अन्य मूल्यों के साथ अद्यतन संदर्भ Mongoose

यहां डेटा अलग-अलग संग्रहों में समाहित है, इसलिए कोई भी अपडेट स्टेटमेंट एक ही समय में दोनों में काउंटरों को बढ़ाने में सक्षम नहीं है।

एक सुसंगत दृश्य प्राप्त करने के लिए आपको अपने अपडेट स्टेटमेंट को "चेन" करना होगा और प्रतिक्रिया बनाने के लिए प्रत्येक के रिटर्न परिणामों का उपयोग करना होगा।

अपनी आवश्यकताओं के आधार पर आप या तो Promise . का उपयोग कर सकते हैं इसके साथ:

testSchema.statics.incrementTest = function(id) {
  var self = this;
  return new Promise(function(resolve,reject) {
    self.findByIdAndUpdate(
      id,
      {
        "$inc": {
          "points": 5,
          "numVotes": 1
        }
      },
      { "new": true }
    ).then(function(test) {
      var userModel = test.schema.path("userCreated").options.ref;
      mongoose.model(userModel).findByIdAndUpdate(
        test.userCreated,
        { "$inc": { "points": 5 } },
        { "new": true }
      ).then(function(user) {
        test.userCreated = user;
        resolve(test);
      })
    }).catch(reject)
  })
};

जिसे आप अपने मॉडल पर लागू कर सकते हैं:

Test.incrementTest("56fe279d363ce91765d9e39e").then(function(test) {
    console.log(JSON.stringify(test,undefined,2));
}).catch(function(err) {
    throw err;
})

या आप async.waterfall . का उपयोग कर सकते हैं async . से पुस्तकालय यदि वह आपको बेहतर लगे:

testSchema.statics.incrementTest = function(id,callback) {
  var self = this;

  async.waterfall(
    [
      function(callback) {
        self.findByIdAndUpdate(
          id,
          { 
            "$inc": {
              "points": 5,
              "numVotes": 1
            }
          },
          { "new": true },
          callback
        )
      },
      function(err,test) {
        if (err) callback(err);
        var userModel = test.schema.path("userCreated").options.ref;
        mongoose.model(userModel).findByIdAndUpdate(
          test.userCreated,
          { "$inc": { "points": 5 } },
          { "new": true },
          function(err,user) {
            if ( typeof(user) !== "undefined" )
                test.userCreated = user;
            callback(err,test);
          }
        );
      }
    ],
    callback
  );
};

जिसका समान उपयोग है:

Test.incrementTest("56fe279d363ce91765d9e39e",function(err,test) {
    if (err) throw err;
    console.log(JSON.stringify(test,undefined,2));
})

दोनों को आपको एक परिणाम वापस देना चाहिए जो दोनों संग्रहों के लिए दोनों वस्तुओं में बढ़ा हुआ डेटा दिखाता है:

{ points: 5,
  numVotes: 1,
  __v: 0,
  userCreated: { points: 5, __v: 0, _id: 56ff1aa6dba6d13e798fc894 },
  createdAt: Sat Apr 02 2016 12:04:38 GMT+1100 (AEDT),
  updatedAt: Sat Apr 02 2016 12:04:38 GMT+1100 (AEDT),
  _id: 56fe279d363ce91765d9e39e }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. जावा स्प्रिंग मोंगो सॉर्ट केस इश्यू पर ध्यान न दें

  2. मैं Mongodb कनेक्शन के लिए PHP 7 में libmongoc ssl को कैसे सक्षम कर सकता हूं?

  3. उल्का $ और $or . के साथ

  4. MongoDB - एकत्रीकरण ढांचा (कुल गणना)

  5. एक pymongo.cursor.Cursor को एक तानाशाही में कैसे बदलें?