gpt4 book ai didi

MongoDB 列出父类别中的子类别

转载 作者:行者123 更新时间:2023-12-04 10:38:47 24 4
gpt4 key购买 nike

所以我有下一个架构:

const CategorySchema = new Schema({
name: {
type: String,
required: true,
},
parent: {
type: Schema.Types.ObjectId,
ref: 'Category',
default: null,
},
order: {
type: Number,
required: true,
min: 0,
}
});

所以我想要的是获得下一个输出(为了简单起见,我放置了简单的 _ids):
[
{
_id: '1',
name: 'MainCategory1',
parent: null,
order: 0,
children: [
{
_id: '3',
name: 'SubCategory3',
parent: '1',
order: 0,
},
]
},
{
_id: '2',
name: 'MainCategory2',
parent: null,
order: 1,
children: [
{
_id: '4',
name: 'SubCategory1',
parent: '2',
order: 0,
},
{
_id: '5',
name: 'SubCategory2',
parent: '2',
order: 1,
},
]
},
]

那么我怎样才能得到这个结果呢?请注意,它必须按“订单”字段排序,对于 parent 以及 child 。

另外,是否可以使用 mongoose 查询而不是聚合来获得此结果?

我知道如果我在 Schema 中存储“children”数组而不是“parent”,这可能会更简单,但我更喜欢这种方法,因为每个类别只有一个 parent 的 ref,并且 doc 不会因 objectid 数组而变得臃肿。反过来说,“children”数组可能真的很大,而且我认为 mongo 如果在搜索时查看一个“父”值,而不是查看“children”数组(可能是 ObjectIds 的 100 多个元素),它的工作速度会更快。

最佳答案

没有办法使用常规 .find()在这里,但您可以利用聚合框架的 $graphLookup :

let Category = mongoose.model('Category', CategorySchema);

let result = await Category.aggregate([
{
$sort: { order: 1 }
},
{
$graphLookup: {
from: 'categories',
startWith: '$_id',
connectFromField: '_id',
connectToField: 'parent',
as: 'children'
}
},
{
$match: {
parent: null
}
}
]);

关于MongoDB 列出父类别中的子类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030113/

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