MongoDB中的嵌套模式
Nested schemas in MongoDB
我刚刚开始在MongoDB中使用子文档。
我有两个模式
childrenSchema = new Schema({
name: String
});
parentSchema = new Schema({
children: [childrenSchema]
});
我应该为每个模式创建一个模型吗?还是最好只为parentSchema
创建一个模型?
我不认为为每个查询创建模型有什么好处,因为我不想使用关系查询。
我建议您只为Parent
创建一个model
,并且您可以将push
Child
放入其中。
在这种情况下,deleting
父将自动delete
子。但是,如果您也为Child制作另一个模型,则必须在delete
parent
之前delete
parent
的所有children
。
如果你不想在Parent
的deletion
上删除child
,你应该create
两个模型,一个用于Parent
,另一个用于Child
,并使用reference
而不是sub-document
来存储子节点。这样,您就不必将整个子文档存储在父文档中,只需_id
即可。稍后,您可以使用mongoose populate
来检索关于子节点的信息。
childrenSchema = new Schema({
name: String
});
var child = mongoose.model('child',childrenSchema);
parentSchema = new Schema({
children: [{type : Schema.Types.ObjectId , ref : 'child'}]
});
在这种情况下我做了以下操作。
将定义、模式、模型分开如下:
1) db/definitions.js:
const
mongoose = require('mongoose'),
Schema = mongoose.Schema,
Child = {
name: {
type: Schema.Types.String,
required: true,
index: true
}
},
Parent = {
name: {
type: Schema.Types.String,
required: true,
index: true
},
children: {
type: [ChildSchemaDefinition],
index: true,
ref: 'Child';
}
};
module.exports = {
Child,
Parent
};
2) db/schemas.js:
const
mongoose = require('mongoose'),
Schema = mongoose.Schema,
definitions = require('./definitions');
Child = new Schema(definitions.Child),
Parent = new Schema(definitions.Parent);
module.exports = {
Child,
Parent
};
3) db/models.js:
const
mongoose = require('mongoose'),
Model = mongoose.model,
schemas = require('./schemas');
const
Child = Model('Child', schemas.Child),
Parent = Model('Parent', schemas.Parent);
module.exports = {
Child,
Parent
};
相关文章:
- 蓝鸟承诺 - 嵌套与拒绝模式
- 为什么我的UI应用程序嵌套在引导模式中时无法工作
- SyntaxError:严格模式不允许在词法嵌套语句中声明函数
- 事件委派模式,在按钮中使用 addEventListener 和嵌套元素
- 原型揭示模式和'这'嵌套函数或返回对象中
- “函数声明不能嵌套在语句中” - IE 处于严格模式错误
- 在正则表达式中创建第 n 级嵌套模式的算法
- 这种嵌套命名空间继承模式是否得到了很好的实现
- 可以使用什么 Javascript 正则表达式模式来捕获可能嵌套括号中的文本
- 嵌套的ui引导模式,缺少背景
- HTML5模式下的angular ui嵌套视图得到404而不是模板文件
- Javascript模块模式:在嵌套函数中调用函数
- 如何在mongoose js中嵌套相同的模式
- REGEX帮助嵌套模式
- MongoDB中的嵌套模式
- 如何在模块化设计模式中嵌套函数
- 不在Mongoose模式中的嵌套对象上的点符号
- 嵌套模式字段上的Mongoose文本索引
- 嵌套AngularJS模式
- mongodb赢得'在嵌套容器中找不到我的模式方法