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

एक उप-दस्तावेज़ को बनाने के बाद नेवला में कैसे पॉप्युलेट करें?

संदर्भित उप-दस्तावेज़ों को पॉप्युलेट करने के लिए, आपको उस दस्तावेज़ संग्रह को स्पष्ट रूप से परिभाषित करने की आवश्यकता है जिसका आईडी संदर्भ है (जैसे created_by: { type: Schema.Types.ObjectId, ref: 'User' } )।

यह देखते हुए कि इस संदर्भ को परिभाषित किया गया है और आपकी स्कीमा अन्यथा अच्छी तरह से परिभाषित है, अब आप केवल populate को कॉल कर सकते हैं हमेशा की तरह (जैसे populate('comments.created_by') )

अवधारणा कोड का प्रमाण:

// Schema
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
  name: String
});

var CommentSchema = new Schema({
  text: String,
  created_by: { type: Schema.Types.ObjectId, ref: 'User' }
});

var ItemSchema = new Schema({
   comments: [CommentSchema]
});

// Connect to DB and instantiate models    
var db = mongoose.connect('enter your database here');
var User = db.model('User', UserSchema);
var Comment = db.model('Comment', CommentSchema);
var Item = db.model('Item', ItemSchema);

// Find and populate
Item.find({}).populate('comments.created_by').exec(function(err, items) {
    console.log(items[0].comments[0].created_by.name);
});

अंत में ध्यान दें कि populate केवल प्रश्नों के लिए काम करता है इसलिए आपको पहले अपने आइटम को एक क्वेरी में पास करना होगा और फिर उसे कॉल करना होगा:

item.save(function(err, item) {
    Item.findOne(item).populate('comments.created_by').exec(function (err, item) {
        res.json({
            status: 'success',
            message: "You have commented on this item",
            comment: item.comments.id(comment._id)
        });
    });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. संग्रह में सभी कुंजियों के नाम प्राप्त करें

  2. MongoDB के लिए डिफ़ॉल्ट डेटाबेस पथ क्या है?

  3. मोंगोडीबी $ln

  4. MongoDB को सेवा के रूप में प्रारंभ नहीं कर सकता

  5. Mongoose/MongoDB में पासवर्ड फ़ील्ड की सुरक्षा कैसे करें ताकि जब मैं संग्रहों को पॉप्युलेट करता हूं तो यह किसी क्वेरी में वापस नहीं आएगा?