【问题标题】:MongoDB group by elements in arrayMongoDB按数组中的元素分组
【发布时间】:2021-12-22 14:27:23
【问题描述】:

我有一个如下所示的集合:

{
  "id": "id1",
  "tags": ['a', 'b']
},
{
  "id": "id2",
  "tags": ['b', 'c']
},
{
  "id": "id3",
  "tags": ['a', 'c']
}

如何进行按“tags”数组中的每个元素分组的查询,结果如下所示?:

{'a': 2},
{'b': 2},
{'c': 2}

(其中 2 是它出现的次数,计数)。 感谢您的帮助!

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用此聚合查询:

    • 首先将$unwind 数组解构为类似对象的访问。
    • 然后$group by tags$sum 1 得到总数。
    • 最后使用$replaceRoot$arrayToObject 来获得所需的输出。
    db.collection.aggregate([
      {
        "$unwind": "$tags"
      },
      {
        "$group": {
          "_id": "$tags",
          "count": {
            "$sum": 1
          }
        }
      },
      {
        "$replaceRoot": {
          "newRoot": {
            "$arrayToObject": [
              [
                {
                  "k": "$_id",
                  "v": "$count"
                }
              ]
            ]
          }
        }
      }
    ])
    

    例如here

    作为补充,如果您想获得排序值(a、b、c...),您可以添加$sort 阶段,如this example

    【讨论】:

    • 非常感谢您的完整回答!这对我帮助很大
    猜你喜欢
    • 2014-02-25
    • 2021-12-20
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2011-11-27
    相关资源
    最近更新 更多