猫鼬错误:嵌套架构

空空间

我有一个关于嵌套猫鼬模式的问题。

这是一个简单的代码片段

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

这将引发TypeErrorbSchemaTypeError: Undefined type at 's' Did you try nesting Schemas? You can only nest using refs or arrays.,但工作得很好cSchema

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

乔丹·福尔曼

MongoDB不是关系数据库。这可能会使一些习惯RDBS模型的人感到困惑(我仍然偶尔会被绊倒,但是我确实不是数据库专家)。

通常,您会发现参考Mongo实体中的其他文档会很有帮助。猫鼬模式提供了一种非常简单且有效的方式来实现此目的,感觉很相关。

当定义将存储到不同类型的文档的参考架构,定义相关的属性作为一个对象typeref通常定义架构属性时,你可以简单地说: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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章