首页 文章

在Mongoose中引用另一个模式

提问于
浏览
87

如果我有两个模式,如:

var userSchema = new Schema({
    twittername: String,
    twitterID: Number,
    displayName: String,
    profilePic: String,
});

var  User = mongoose.model('User') 

var postSchema = new Schema({
    name: String,
    postedBy: User,  //User Model Type
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

我尝试将它们连接在一起,就像上面的例子,但我无法弄清楚如何做到这一点 . 最终,如果我可以做这样的事情,那将使我的生活变得非常轻松

var profilePic = Post.postedBy.profilePic

2 回答

  • 147

    听起来像填充方法就是你要找的东西 . 首先对您的帖子架构进行小的更改:

    var postSchema = new Schema({
        name: String,
        postedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
        dateCreated: Date,
        comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
    });
    

    然后制作你的模特:

    var Post = mongoose.model('Post', postSchema);
    

    然后,当您进行查询时,可以填充这样的引用:

    Post.findOne({_id: 123})
    .populate('postedBy')
    .exec(function(err, post) {
        // do stuff with post
    });
    
  • 18

    附录:没有人提到“填充” - 非常值得你花时间和金钱看Mongooses Populate方法:也解释了交叉文件引用

    http://mongoosejs.com/docs/populate.html

相关问题