代码之家  ›  专栏  ›  技术社区  ›  Alexander

对MongoDB中的集合进行递归计数

  •  2
  • Alexander  · 技术社区  · 7 年前

    我在MongoDB中有一个树状结构的文档列表。我想要一个聚合查询,该查询返回所有嵌套子级的计数,给定 _id 所有物

    结构:

    {
      '_id': '1',
      'parentId': null,
    },
    {
      '_id': '2',
      'parentId': '1',
    },
    {
      '_id': '3',
      'parentId': '1',
    },
    {
      '_id': '4',
      'parentId': '3',
    }
    

    聚合结果:(给定: _id='1' )

    {
      total_children: 3
    }
    

    我知道这可能需要 $graphLookup 这个问题与 Recursive search on a collection in MongoDB 但在某种意义上是倒退的。

    1 回复  |  直到 7 年前
        1
  •  4
  •   s7vr    7 年前

    您可以使用以下聚合查询。

    递归查找以查找给定id的所有子项,后跟 $size 数一数孩子。

    db.col.aggregate([
      {"$match":{"_id":"1"}},
      {"$graphLookup":{
        "from":col,
        "startWith":"$_id",
        "connectFromField":"_id",
        "connectToField":"parentId",
        "as":"children"
      }},
      {"$project":{"total_children":{"$size":"$children"}}}
    ])