嵌入式文件没有数组?

时间:2013-10-28 13:14:21

标签: mongodb express mongoose

我理解如何在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,而是存储用户记录的完整副本,但不需要或不需要数组。

2 个答案:

答案 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 }},