MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie fülle ich ein untergeordnetes Dokument in Mungo aus, nachdem ich es erstellt habe?

Um referenzierte Unterdokumente zu füllen, müssen Sie explizit die Dokumentensammlung definieren, auf die die ID verweist (wie created_by: { type: Schema.Types.ObjectId, ref: 'User' } ).

Da diese Referenz definiert ist und Ihr Schema auch ansonsten gut definiert ist, können Sie jetzt einfach populate aufrufen wie gewohnt (z. B. populate('comments.created_by') )

Proof-of-Concept-Code:

// 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);
});

Beachten Sie schließlich, dass populate funktioniert nur für Abfragen, daher müssen Sie Ihr Element zuerst an eine Abfrage übergeben und es dann nennen:

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)
        });
    });
});