我有一个关于嵌套 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 模式提供了一种非常简单有效的方法来执行此操作,感觉非常相关。
在定义将存储对不同类型文档的引用的架构时,您将相关属性定义为具有 type
和 ref
的对象。通常在定义架构属性时,您可以简单地说: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/