【发布时间】:2021-09-17 22:03:40
【问题描述】:
我在 mongoDB 呼叫公司中有一个简单的文档,其架构如下:
const companySchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
id: { type: String },
name: { type: String },
parentId: { type: String, default: null },
type: { type: Number },
active: { type: Boolean, default: true },
number: { type: String },
});
然后我有一个查询来获取所有公司并按 parentId 将它们分组并将所有子公司添加到分支机构属性。
我在某种程度上完成了这项工作,但需要最后的努力才能获得所需的一切。
这是我目前的代码:
Company.aggregate([
{
$match: {
active: true,
},
},
{
$project: {
_id: { $cond: ['$parentId', '$parentId', '$id'] },
name: 1,
id: '$id',
parent: '$parent',
parentId: { $ifNull: ['$parentId', false] },
},
},
{ $sort: { _id: 1, parentId: -1 } },
{
$group: {
_id: '$_id',
name: { $min: { $cond: ['$parentId', '$name', false] } },
branches: {
$push: '$$ROOT',
},
},
},
{
$project: {
name: 1,
branches: '$branches',
},
},
])
这是我目前得到的输出:
{
"_id": "29689760",
"name": "Branch 2",
"branches": [
{ "name": "Test (Head Office)", "_id": "29689760", "id": "29689760", "parentId": false },
{ "name": "Branch 1", "_id": "29689760", "id": "29694015", "parentId": "29689760" },
{ "name": "Branch 2", "_id": "29689760", "id": "29694016", "parentId": "29689760" },
{ "name": "Branch 3", "_id": "29689760", "id": "29694017", "parentId": "29689760" },
{ "name": "Branch 4", "_id": "29689760", "id": "29694018", "parentId": "29689760" }
]
}
我需要的是返回所有关于母公司和分支机构以排除母公司的主要对象,即
{
"_id": "29689760",
"name": "Test (Head Office)"",
"branches": [
//the next line will be missins
//{ "name": "Test (Head Office)", "_id": "29689760", "id": "29689760", "parentId": false },
{ "name": "Branch 1", "_id": "29689760", "id": "29694015", "parentId": "29689760" },
{ "name": "Branch 2", "_id": "29689760", "id": "29694016", "parentId": "29689760" },
{ "name": "Branch 3", "_id": "29689760", "id": "29694017", "parentId": "29689760" },
{ "name": "Branch 4", "_id": "29689760", "id": "29694018", "parentId": "29689760" }
]
}
我尝试将$lookup 添加为聚合的第一个参数,但这会将信息添加到每个分支机构,而不仅仅是母公司。
有什么帮助吗?
【问题讨论】:
标签: mongodb mongoose aggregation-framework