node.js - Mongoose 错误 : nesting Schemas

标签 node.js mongodb mongoose

我有一个关于嵌套 Mongoose 架构的问题。

这是一个简单的代码片段

var aSchema = new Schema({bar: String});
var bSchema = new Schema({a: aSchema, foo: String});
var cSchema = new Schema({as: [aSchema], foo:String});

这将在 bSchema 上抛出 TypeError:TypeError: Undefined type at 's' 你尝试嵌套模式了吗?您只能使用 refs 或数组进行嵌套。,但适用于 cSchema

只想问为什么bSchema 不起作用。在 Mongoose 文档中找不到解释。谢谢。

最佳答案

MongoDB 不是关系数据库。这可能会让一些习惯于 RDBS 模型的人感到困惑(我仍然偶尔会被绊倒……但我真的不是 DB 人)。

通常,您会发现在您的 Mongo 实体中引用其他 文档 是有益的。 Mongoose 模式提供了一种非常简单有效的方法来执行此操作,感觉非常相关。

在定义将存储对不同类型文档的引用的架构时,您将相关属性定义为具有 typeref 的对象。通常在定义架构属性时,您可以简单地说:a: Number;但是,Mongoose 为除类型之外的模式属性提供了许多不同的选项:

a: {
   type: Number,
   required: true   
}

设置 required: true 将阻止我们保存不存在 a 属性的文档。

一旦您了解了如何使用对象定义来定义架构,您就可以利用 Mongoose 的填充机制:

a: {
   type: Mongoose.Schema.ObjectId,
   ref: 'a'
}

这告诉 Mongoose 将特定 a 文档的 ObjectId(Mongoose 特定标识符)存储为我们模式的 a 属性.还在关注我吗?

在 Mongoose 文档上设置此属性时,您可以简单地说:doc.a = myA。当你去保存 doc 时,Mongoose 会自动进行转换,并且只将 ID 存储在你的数据库中。

在检索引用另一个架构的文档时,您需要进行填充。我不会深入讨论,但它非常简单 - check out the documentation .

关于node.js - Mongoose 错误 : nesting Schemas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27259449/

相关文章:

javascript - mongoose 查找多个条件的记录并检查请求参数是否不为空

node.js - 简单的 NodeJS http 请求相当于curl

node.js - 我如何使用 multer 上传视频并强制格式为 mp4

MongoDB 重命名收集失败,返回 "exceeds maximum length of 32, allowing for index names"

mongodb - 初始化 mongo DB 客户端时 Azure Web 应用程序崩溃

node.js - Mongoose 将返回的数据限制为模型

javascript - Mongoose:如何捕获由异步回调引起的 MongoError

node.js - 配置nginx直接从node.js Express站点的public文件夹获取js和css

javascript - 将变量从 JavaScript 传递到 Node.js

javascript - MongoDB:计算每个不同的值有多少?