【问题标题】:Count Recursively on a collection in MongoDB递归计算 MongoDB 中的集合
【发布时间】:2018-01-24 08:31:42
【问题描述】:

我在 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 非常相似,但在某种意义上是倒退的。

【问题讨论】:

    标签: mongodb recursion tree aggregation-framework


    【解决方案1】:

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

    递归查找以定位给定 _id 的所有子代,后跟 $size 以计算子代数。

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

    【讨论】:

    • 这可能是一个愚蠢的问题,但 $graphLookup 阶段的col 是什么?编辑:没关系,那是我的收藏。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多