我理解如何在Mongoose中embed documents,如果存储为数组,它们看起来相当简单,用例非常明显:
var CommentSchema = new Mongoose.Schema({...});
var BlogPostSchema = new Mongoose.Schema({
comments : [CommentSchema],
});
但是,在向前和向后查看文档之后我看不到该怎么做,是如何存储一个不需要或想要在Array中的单个子文档。
var UserSchema = new Mongoose.Schema({...});
var BlogPostSchema = new Mongoose.Schema({
author: ??? // 'UserSchema' and UserSchema do not work here.
});
有没有办法让这项工作?我不想只存储ObjectId,而是存储用户记录的完整副本,但不需要或不需要数组。
答案 0 :(得分:18)
您不能以这种方式嵌入模式,因为这些子文档会与完整文档混淆,请参阅this bug thread,其中说明了:
我们之前没有添加过这种支持的原因是b / c这让我们想知道是否所有预挂钩都将以相同的方式执行伪子文档,这意味着我们可以调用save ()那个孩子。
这里的答案是不分享架构,而只分享定义。
var userdef = { name: String };
var UserSchema = new Schema(userdef);
var BlogPostSchema = new Schema({author: userdef});
这将导致嵌套的用户对象,而不实际嵌套Schema。
答案 1 :(得分:1)
仅仅共享信息并不支持验证冒泡。您可能还需要验证UserSchema。
相反,我推荐数组长度验证
author: {type:[UserSchema], validate: function (arr) { return arr.length == 1 }},