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”的文档隐藏在
填充的文档中: