我有一个关于嵌套猫鼬模式的问题。
这是一个简单的代码片段
var aSchema = new Schema({bar: String});
var bSchema = new Schema({a: aSchema, foo: String});
var cSchema = new Schema({as: [aSchema], foo:String});
这将引发TypeError
的bSchema
:TypeError: Undefined type at 's' Did you try nesting Schemas? You can only nest using refs or arrays.
,但工作得很好cSchema
。
只想问为什么bSchema
不起作用。在猫鼬文档中找不到解释。谢谢。
MongoDB不是关系数据库。这可能会使一些习惯RDBS模型的人感到困惑(我仍然偶尔会被绊倒,但是我确实不是数据库专家)。
通常,您会发现参考Mongo实体中的其他文档会很有帮助。猫鼬模式提供了一种非常简单且有效的方式来实现此目的,感觉很相关。
当定义将存储到不同类型的文档的参考架构,定义相关的属性作为一个对象type
和ref
。通常定义架构属性时,你可以简单地说:a: Number
; 但是,Mongoose为模式属性提供了除类型以外的许多其他选项:
a: {
type: Number,
required: true
}
设置required: true
将阻止我们保存a
不存在该属性的文档。
一旦了解了如何使用对象定义定义架构,就可以利用Mongoose的填充机制:
a: {
type: Mongoose.Schema.ObjectId,
ref: 'a'
}
这告诉Mongoose将ObjectId
特定a
文档的(特定于Mongoose的标识符)存储为a
架构的属性。还在关注我吗?
在Mongoose文档上设置此属性时,您可以简单地说:doc.a = myA
。当您保存时doc
,Mongoose会自动进行转换,仅将ID存储在您的数据库中。
检索引用另一个架构的文档时,需要填充。我不会介绍它,但是它很简单-查阅文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句