Mongoose / MongoDB中嵌套模式的正确模式是什么?

对我来说,做下面的事情似乎是合乎逻辑的:

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,所以这些都不会被保留下来。

  • 从用户/头像删除每个_id似乎很愚蠢。
  • 明确设置每个用户/头像似乎效率低下。
  • 切换到混合types,将所有东西放在那里,并需要markModified。

这些模式的适当模式是什么?

谢谢!

我仍然是mongoose,如果我理解正确,我认为你需要阅读的是这个: http : //mongoosejs.com/docs/populate.html

有一个非常好的简单的例子,你在其他模式中引用了模式。 因此,为了将特定模式的文档包含在另一个文档中,最好通过引用来包含它。 当你需要的时候,你可以在父文件上调用填充。 当您更改子文档时,填充的父文件当然也会发生更改。

我相信你的假设是正确的,在Mongoose中被称为embedded式文档,下面是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); 

免责声明:我不一定把项目之前的逗号!