【问题标题】:MongoDB count documents for each array elementsMongoDB 计算每个数组元素的文档
【发布时间】:2019-12-15 23:01:35
【问题描述】:

我h

{
  code : "X1",
  elements : ["A", "B", "C", "D"]
},
{
  code : "X2",
  elements : ["C", "D"]
},
{
  code : "X3",
  elements : ["A"]
}
...

我想知道“元素”数组中每种类型的值存在的文档数量。 es。 是的。

"A" : 2
"B" : 1
"C" : 2
"D" : 2

单个查询是否可行?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    你可以$unwind你的数组来获取每个元素的单个文档,然后运行$group来计算元素:

    db.collection.aggregate([
        {
            $unwind: "$elements"
        },
        {
            $group: {
                _id: "$elements",
                count: { $sum: 1 }
            }
        }
    ])
    

    编辑:您可以使用带有 $replaceRoot$arrayToObject 的附加组将您的 id 作为键返回并将计数作为值:

    db.collection.aggregate([
        {
            $unwind: "$elements"
        },
        {
            $group: {
                _id: "$elements",
                count: { $sum: 1 }
            }
        },
        {
            $group: {
                _id: null,
                counts: { $push: { k: "$_id", v: "$count" } }
            }
        },
        {
            $replaceRoot: {
                newRoot: { $arrayToObject: "$counts" }
            }
        }
    ])
    

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      相关资源
      最近更新 更多