我知道如何在Mongoose中使用embed documents,如果将它们存储为数组,它们看起来相当简单,对于这种情况,用例非常明显:

var CommentSchema = new Mongoose.Schema({...});
var BlogPostSchema = new Mongoose.Schema({
    comments : [CommentSchema],
});

但是,在向前和向后查看文档之后,我不知道如何存储不需要或不希望位于数组中的单个子文档.

var UserSchema = new Mongoose.Schema({...});
var BlogPostSchema = new Mongoose.Schema({
    author: ??? // 'UserSchema' and UserSchema do not work here. 
});

有什么办法可以让这一切顺利进行吗?我不想只存储ObjectId,而是存储用户记录的完整副本,但不需要或想要array.

推荐答案

不能以这种方式嵌入模式,因为这些子文档可能会与完整文档混淆,请参见this bug thread,其中说明:

我们过go 没有添加这种支持的原因是b/c,这让我们想知道,对于伪子文档,是否所有预钩子都将以相同的方式执行,这意味着我们可以对该子文档调用save().

这里的答案不是共享模式,而是共享定义.

var userdef = { name: String };
var UserSchema = new Schema(userdef);
var BlogPostSchema = new Schema({author: userdef});

这将导致嵌套的用户对象,而不实际嵌套模式.

Mongodb相关问答推荐

如何联接Mongoose中的集合并检索特定字段

除非满足某个条件,否则Mongo是否按日期排序?

MongoDB $lookup 查找字段值数组

无法配置数据源:未指定url属性,无法为 MongoDb 配置嵌入数据源

从 Amazon S3(Next.js、Mongodb、Mongoose)删除图像

多键索引,性能问题

为什么使用 Golang Mongo 驱动程序进行简单查询需要超过 2 秒?

如何判断 mongodb 聚合,该文档具有键,该键是一个数组,其第二个元素是否存在?

避免在 MongoDB 聚合框架中使用 ISODate() 以便管道可以是纯 JSON

MongoID find 或 find_by

如何根据_id删除文档?

在一个变量上运行的 Node JS 中使用正则表达式的 Mongo 查询

Java MongoDB FindOne 获取最后插入的记录

GeoJSON 和 MongoDB:将点存储为 GeoJSON.Point 是否值得?

带有 mongodb 和 nodejs 的实时 Web 应用程序

什么是 mongodb 中的admin数据库?

从 mongo 结果中删除 _id

错误:需要数据和盐参数

'this' 在 Mongoose 预保存挂钩中未定义

哪个数据库适合我的应用程序 mysql 或 mongodb ?使用 Node.js 、 Backbone 、 Now.js