Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Mongoose中引用另一个模式_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript 在Mongoose中引用另一个模式

Javascript 在Mongoose中引用另一个模式,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,如果我有两个模式,如: 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,

如果我有两个模式,如:

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

听起来,填充方法正是您需要的。首先,对您的帖子架构进行小的更改:

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

附录:没有人提到“填充”-这是非常值得你的时间和金钱看猫鼬填充方法:还解释了交叉文档引用


迟交回复,但补充说猫鼬也有

使用此语法,您应该能够在
postSchema
中将
userSchema
作为类型引用,如下所示:

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

var postSchema = new Schema({
    name: String,
    postedBy: userSchema,
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});
注意类型为
userSchema
的更新的
postedBy
字段


这将在文章中嵌入用户对象,从而节省使用引用所需的额外查找。有时这可能更可取,而其他时候,ref/populate路由可能是一种选择。取决于应用程序正在执行的操作。

什么是“ref”字段?我找不到有关它的文档。@KarlMorrison ref字段表示要在哪个集合中搜索所提到的id。填充和addToSet之间的区别是什么?引用方:selectro@KarlMorrison“ref”的文档隐藏在
填充的文档中: