MongoDB中的嵌套模式

时间:2016-09-04 07:04:27

标签: javascript node.js mongodb mongoose

我刚开始在MongoDB中使用子文档。

我有两个架构

childrenSchema = new Schema({
  name: String
});

parentSchema = new Schema({
  children: [childrenSchema]
});

我应该为每个架构创建一个模型,还是最好只为parentSchema建立一个模型?

我没有看到为每个人创建模型的优势,因为我不想使用关系查询。

2 个答案:

答案 0 :(得分:0)

我建议您只为model创建一个Parent,然后您可以push Child

在这种情况下,deleting家长也会自动delete个孩子。但是,如果您为Child制作另一个模型,则必须delete children parent delete parent之前child

<强>交替

如果您不想删除deletion Parent 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 :(得分:0)

在这种情况下我会关注。

将以下定义,模式,模型分开:

1)db / definitions.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    
};

2)db / schemas.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
};

3)db / models.js:

public List<Whatever> generateList() { 
  return new ArrayList<>();
}