首页 > 解决方案 > Mongodb在同一个集合中获取给定父母的所有子文档

问题描述

我是 MongoDB 的新手。我试图让所有在一位经理下工作的用户。以下是我的收藏:

[{
  "_id": {
    "$oid": "6103b24ceb3d6900012eab2b"
  },
  "Name": "Name1",
  "ManagerUserId": ""
}, {
  "_id": {
    "$oid": "611a13c10a69160001a3f45b"
  },
  "Name": "Name1.1",
  "ManagerUserId": "6103b24ceb3d6900012eab2b"
}, {
  "_id": {
    "$oid": "611cb99de9aeb900011a27bf"
  },
  "Name": "Name1.2",
  "ManagerUserId": "6103b24ceb3d6900012eab2b"
}, {
  "_id": {
    "$oid": "611f4d9ba769510001678fa0"
  },
  "Name": "Name1.1.1",
  "ManagerUserId": "611a13c10a69160001a3f45b"
}, {
  "_id": {
    "$oid": "611f4de5a769510001678fa2"
  },
  "Name": "Name1.1.2",
  "ManagerUserId": "611a13c10a69160001a3f45b"
}, {
  "_id": {
    "$oid": "611f5739a769510001678fad"
  },
  "Name": "Name1.2.1",
  "ManagerUserId": "611cb99de9aeb900011a27bf"
}, {
  "_id": {
    "$oid": "611f5779a769510001678faf"
  },
  "Name": "Name1.2.2",
  "ManagerUserId": "611cb99de9aeb900011a27bf"
}, {
  "_id": {
    "$oid": "611f589aa769510001678fb3"
  },
  "Name": "Name1.1.1.1",
  "ManagerUserId": "611f4d9ba769510001678fa0"
}, {
  "_id": {
    "$oid": "611f58f8a769510001678fb5"
  },
  "Name": "Name1.1.1.2",
  "ManagerUserId": "611f4d9ba769510001678fa0"
}, {
  "_id": {
    "$oid": "611f5932a769510001678fb7"
  },
  "Name": "Name1.1.1.3",
  "ManagerUserId": "611f4d9ba769510001678fa0"
}, {
  "_id": {
    "$oid": "611f5976a769510001678fb9"
  },
  "Name": "Name1.1.1.4",
  "ManagerUserId": "611f4d9ba769510001678fa0"
}]

有N级层次结构。我尝试使用 Neil Lunn 的graphLookupSO Answer 进行mongo 聚合操作

[{$match: {
  "Name": "Name1.1"
}}, {$addFields: {
"ManagerUserId": { "$toObjectId": "$ManagerUserId" }
}}, {$graphLookup: {
         from: "User",
         startWith: "$ManagerUserId",
         connectFromField: "ManagerUserId",
         connectToField: "_id",
         as: "reportingHierarchy",
         maxDepth:4
}}]

但这导致每个报告层次结构中的所有孩子。

我需要以下输出:

[
{
    "_id": {
        "$oid": "611f4d9ba769510001678fa0"
    },
    "Name": "Name1.1.1",
    "ManagerUserId": "611a13c10a69160001a3f45b"
},
{
    "_id": {
        "$oid": "611f4de5a769510001678fa2"
    },
    "Name": "Name1.1.2",
    "ManagerUserId": "611a13c10a69160001a3f45b"
},
{
    "_id": {
        "$oid": "611f589aa769510001678fb3"
    },
    "Name": "Name1.1.1.1",
    "ManagerUserId": "611f4d9ba769510001678fa0"
},
{
    "_id": {
        "$oid": "611f58f8a769510001678fb5"
    },
    "Name": "Name1.1.1.2",
    "ManagerUserId": "611f4d9ba769510001678fa0"
},
{
    "_id": {
        "$oid": "611f5932a769510001678fb7"
    },
    "Name": "Name1.1.1.3",
    "ManagerUserId": "611f4d9ba769510001678fa0"
},
{
    "_id": {
        "$oid": "611f5976a769510001678fb9"
    },
    "Name": "Name1.1.1.4",
    "ManagerUserId": "611f4d9ba769510001678fa0"
}]

在这个SO 问题中,它被要求得到祖先,但我正在寻找孩子。请帮助我通过 mongodb 查询来实现这一点

Relation _id PK 类型 ObjcetId ManagerUserId FK(_id) 类型字符串

标签: mongodbmongodb-queryaggregation-framework

解决方案


推荐阅读