Nul*_*ace 7 mongoose mongodb node.js
我有一个关于嵌套Mongoose模式的问题.
这是一个简单的代码片段
var aSchema = new Schema({bar: String});
var bSchema = new Schema({a: aSchema, foo: String});
var cSchema = new Schema({as: [aSchema], foo:String});
Run Code Online (Sandbox Code Playgroud)
这将引发TypeError的bSchema:TypeError: Undefined type at 's' Did you try nesting Schemas? You can only nest using refs or arrays.,但工作得很好cSchema.
只是想问为什么bSchema不起作用.在Mongoose doc中找不到解释.谢谢.
MongoDB 不是关系数据库.这可能会让一些习惯RDBS模型的人感到困惑(我偶尔也会被绊倒......但我真的不是数据库人).
通常情况下,您会发现在Mongo实体中引用其他文档是有益的.Mongoose模式提供了一种非常简单有效的方法来实现这种非常关系的方式.
定义将存储对不同类型文档的引用的模式时,将相关属性定义为具有a type和a 的对象ref.通常定义架构属性时,你可以简单地说:a: Number; 但是,Mongoose为类型以外的架构属性提供了许多不同的选项:
a: {
type: Number,
required: true
}
Run Code Online (Sandbox Code Playgroud)
设置required: true将阻止我们保存a不存在属性的文档.
一旦了解了如何使用对象定义定义模式,就可以利用Mongoose的人口机制:
a: {
type: Mongoose.Schema.ObjectId,
ref: 'a'
}
Run Code Online (Sandbox Code Playgroud)
这告诉Mongoose将ObjectId特定a文档的(特定于Mongoose的标识符)存储a为我们的模式的属性.还在跟着我?
在Mongoose文档上设置此属性时,您可以简单地说:doc.a = myA.当您去保存时doc,Mongoose将自动进行转换,并仅将ID存储在您的数据库中.
检索引用其他架构的文档时,您需要填充.我不会进入那个,但它非常简单 - 查看文档.
| 归档时间: |
|
| 查看次数: |
8096 次 |
| 最近记录: |