gpt4 book ai didi

mongodb - Mongoose - 我应该向父文档、子文档或两者添加引用吗?

转载 作者:行者123 更新时间:2023-12-03 14:04:31 25 4
gpt4 key购买 nike

我有两个 mongodb 集合,我们称它们为 parentschildren .这种父/子设计具有一对多的关系,当我查询父级时,我也想要子级。有这个模型设计是有意义的:

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

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

这样,我就可以使用 populate()轻松地将 child 置于父级中。但是,有人告诉我使用这样的数组并不好,因为它们会变得困惑。所以,如果我把对象引用放在 ChildSchema 中,那么我可以避免使用这样的数组。
var ParentSchema = new Schema({
name: String
});

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

但是如果我想再次让 child 和 parent 在一起, populate()不会工作。最好的模式是什么,如果我在 child 中使用 refs,是否有类似于 populate() 的方法?这样做吗?我不喜欢必须进行两次查询才能获得一个结果。

最佳答案

我的理解是,在Parents中存储对Children的引用数组的问题是Children数组无界的情况。如果不是这种情况,我相信在Parents中存储对Children的引用数组是推荐的模式。如果 child 的数量非常大或无限,文档建议使用 Virtuals。

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

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

const 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
});


const Parent = mongoose.model('Parent', parentSchema);
const 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.
});

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

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

希望这可以帮助。

关于mongodb - Mongoose - 我应该向父文档、子文档或两者添加引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40877612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com