猫鼬 - 我应该在父文档,子文档或两者中添加引用吗?

Ale*_*uck 1 schema mongoose mongodb

我要收藏的MongoDB,让我们称他们parentschildren.这个父母/孩子的设计有一对多的关系,当我查询父母时我也想要孩子.根据这个逻辑,有这个模型设计是有道理的:

var ParentSchema = new Schema({
    name: String,
    children: [{type: Schema.Types.ObjectID, ref: 'Child'}]
});

var ChildSchema = new Schema({
    name: String
});
Run Code Online (Sandbox Code Playgroud)

这样,我可以populate()用来轻松地让孩子与父母一起.但是,我被告知使用这样的数组并不好,因为它们会变得混乱.所以,如果我把对象引用放在ChildSchema那里,那么我可以避免使用这样的数组.

var ParentSchema = new Schema({
    name: String
});

var ChildSchema = new Schema({
    name: String,
    parent: {type: Schema.Types.ObjectID, ref: 'Parent'}
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我想再次与父母一起生孩子,populate()将无法工作.什么是最好的模式,如果我在孩子们使用refs,有没有类似的方法populate()呢?我不喜欢做查询以获得一个结果.

qua*_*rpi 5

我的理解是,存在一系列对父母中的儿童的引用的问题将是儿童阵列无限制的情况.如果不是这种情况,我认为在父母中存储一系列参考文献是推荐的模式.如果孩子的数量非常大或无限制,那么文档建议使用Virtuals.

我相信一个简单的例子看起来像......

`
var ChildSchema = new Schema({
      name: String,
      parent: String
});

var ParentSchema = new Schema({
       name: String
});

ParentSchema.virtual('children', {
      ref: 'Child',   // the model to use
      localField: 'name',  // find children where 'localField' 
      foreignField: 'parent' // is equal to foreignField
});


var Parent = mongoose.model('Parent', parentSchema);
var Child = mongoose.model('Child', childSchema);

/*
 Let's say we have two parents: Jack and Mindy
 And four children: Jake with Jack, and Mike, Molly, and Mildred with Mindy
*/

Parent.find({}).populate('children').exec(function(error, parents) {
/// parents.children is now an array of instances of Child. 
});

`
Run Code Online (Sandbox Code Playgroud)

有关人口的更多信息,请查看Mongoose.js文档mongoosejs.com.

所有归功于mongoosejs.com作为我的例子只是他们的改编.此外,请注意我没有实际测试此代码,因为我在手机上回答了这个问题.

希望这可以帮助.