对我来说,做以下事情似乎是合乎逻辑的:
var AvatarSchema = new Mongoose.Schema({
type: String,
url: String
});
var UserSchema = new Mongoose.Schema({
avatars: [AvatarSchema],
email: String,
name: String,
salt: String,
token: String
});
var ThinUserSchema = new Mongoose.Schema({
avatars: [AvatarSchema],
email: String,
firstname: String,
lastname: String,
});
var QuestionSchema = new Mongoose.Schema({
question: String,
users: [ThinUserSchema]
});
然后是。 。 。具体如下:
var question = new Question({
question: 'Wut?',
users: users //where users is an array of instances of a user model of the UserSchema
});
在这里,我希望问题的用户部分可以填充头像,电子邮件,名字和姓氏。 。 。但是,由于用户/头像已经有_id,因此不会持久存在。
这些模式的正确模式是什么?
谢谢!
答案 0 :(得分:6)
我相信你的假设是正确的,它在Mongoose中称为嵌入式文档,这是Mongoose文档中的示例。
var Comments = new Schema({
title : String
, body : String
, date : Date
});
var BlogPost = new Schema({
author : ObjectId
, title : String
, body : String
, date : Date
, comments : [Comments]
, meta : {
votes : Number
, favs : Number
}
});
mongoose.model('BlogPost', BlogPost);
免责声明:我不一定会在项目之前加上逗号!
答案 1 :(得分:4)
我仍然是猫鼬noob,如果我理解正确,我认为你需要阅读的是: http://mongoosejs.com/docs/populate.html
有一个非常好的简单示例,您在其他模式中引用了模式。因此,为了将特定模式的文档包含在另一个模式中,最好通过引用包含它。如果需要,可以在父文档上调用populate。当您更改子文档时,填充的父级当然也会更改。