gpt4 book ai didi

javascript - Mongoose - 子架构引用父子文档

转载 作者:可可西里 更新时间:2023-11-01 09:35:20 26 4
gpt4 key购买 nike

是否有可能具有类似于以下内容的 Mongoose Schema:

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

var childSchema = new Schema({
name : String,
category : {
type : Schema.Types.ObjectId,
ref : 'parent.categories'
}
});

var parentSchema = new Schema({
categories : [categorySchema],
children : [childSchema]
});

基本上,一个 child 只能拥有一个由其 parent 包含的类别。我正在尝试做的事情可能吗?如果不是,最干净的方法是什么?

最佳答案

如果 categorySchema 中只有一个字段 name,也许你可以将它放入 parentSchema 而无需 population 如下所示,

var childSchema = new Schema({
name : String,
category : {
name: String
}
});

var parentSchema = new Schema({
categories : [{name: String}],
children : [childSchema]
});

当尝试将新的child插入parent时,您可以先查询parent,然后迭代categories获取现有的并将其添加到children,将parent保存为最后,示例代码如下

Parent.find({_id: parent._id})
.exec(function(err, p) {
if (err) throw err;
var p = new Child({name: 'tt'});
p.categories.forEach(function(c) {
if (c /*find the match one*/) {
p.category = c; // assign the existing category to children
}
});
// save this parent
p.save(function(err) {...});
});

如果 categorySchema 中有很多字段,也许将其定义为单独的模式可能是一种选择,以防 Parent 中有很多类别也可以创建父集合大。

var categorySchema = new Schema({
name : String,
// other fields....
});
var Category = mongoose.model('Category', categorySchema);

var childSchema = new Schema({
name : String,
category : {type : Schema.Types.ObjectId, ref : 'Category'}
});

var parentSchema = new Schema({
categories : [{type : Schema.Types.ObjectId, ref : 'Category'}],
children : [childSchema]
});

尝试将新的 children 添加到 parent 文档时的逻辑与上述相同。

关于javascript - Mongoose - 子架构引用父子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690897/

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