我正在try 构建一个查询,该查询允许我从具有父子关系的文档中提取数组列表. 这样我就可以在Find查询中使用这个array. 查询不一定只是MongoDB,它可以是基于打字脚本的.

Question is -个 当我搜索{"itemGroupName":"pari"}时 我想将它的"ChildrenGroupList"和它的所有子级的"ChildrenGroupList"值提取到一个数组中.

.

    [{
      "_id": {
        "$oid": "64c62f8b312e0601c656cae3"
      },
      "itemGroupName": "PARI",
      "alias": "001",
      "parentGroupName": "",
      "hsn": "",
      "taxCategory": "",
      "status": {
        "active": true
      },
      "childrenGroupList": [
        "DREAMS PARI"
      ],
      "__v": 0
    },

    {
      "_id": {
        "$oid": "64c62f98312e0601c656caea"
      },
      "itemGroupName": "DREAMS PARI",
      "alias": "002",
      "parentGroupName": "PARI",
      "hsn": "",
      "taxCategory": "",
      "status": {
        "active": true
      },
      "childrenGroupList": [
        "DREAMS PARI 001",
        "DREAMS PARI 002"
      ],
      "__v": 0
    },

    {
      "_id": {
        "$oid": "64c62fb1312e0601c656caf2"
      },
      "itemGroupName": "DREAMS PARI 001",
      "alias": "003",
      "parentGroupName": "DREAMS PARI",
      "hsn": "",
      "taxCategory": "",
      "status": {
        "active": true
      },
      "childrenGroupList": [],
      "__v": 0
    },
    {
      "_id": {
        "$oid": "64c63ffb6ecb0dcc1ee71555"
      },
      "itemGroupName": "DREAMS PARI 002",
      "alias": "004",
      "parentGroupName": "DREAMS PARI",
      "hsn": "",
      "taxCategory": "",
      "status": {
        "active": true
      },
      "childrenGroupList": ["DREAMS PARI 002B"],
      "__v": 0
    },
    {
      "_id": {
        "$oid": "64c63ffb6ecb0dcc1ee715654"
      },
      "itemGroupName": "DREAMS PARI 002B",
      "alias": "005",
      "parentGroupName": "DREAMS PARI 002",
      "hsn": "",
      "taxCategory": "",
      "status": {
        "active": true
      },
      "childrenGroupList": [],
      "__v": 0
    }
]

推荐答案

你想用Mongo的$graphLookup美元.它允许递归查找,这正是您正在寻找的.

如下所示:

db.collection.aggregate([
  {
    $match: {
      "itemGroupName": "PARI"
    }
  },
  {
    "$graphLookup": {
      "from": "collection",
      "startWith": "$childrenGroupList",
      "connectFromField": "childrenGroupList",
      "connectToField": "itemGroupName",
      "as": "result",
      
    }
  },
  {
    $project: {
      childrenGroupList: {
        $setUnion: {
          $map: {
            input: "$result",
            in: "$$this.itemGroupName"
          }
        }
      }
    }
  }
])

Mongo Playground

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

会话的Mongo-go驱动程序版本.Copy()

MongoDB中的字符串聚合

Mongoose 聚合和多级组

如何获取mongodb ObjectId的值?

将 MongoDB BsonDocument 转换为字符串

使用 Node.js 通过 SSL 连接到 MongoDB

根据 Month 删除 mongodb 中的旧记录

将 mongoose 字符串模式类型默认值设为空白并使该字段可选

Mongoose Schema vs Mongo Validator

如何在我的Meteor 应用程序数据库中使用 mongoimport?

MongoDB聚合排序不起作用

具有简单密码认证的 MongoDB 副本集

mongodb nodejs - 转换圆形 struct

为什么我新创建的 mongodb 本地数据库增长到 24GB?

在安装的 MongoDB homebrew 中设置 dbpath (Mac OS)

如何使用 MongoDB C# 驱动程序有条件地组合过滤器?

Mongodb - 如何在多个字段中查找字符串?

Mongoose:Model.create 和 Collection.insert 有什么区别

mongodb安装失败运行mongod