【问题标题】:MongoDB - Get a summary of the count for each field for each value of a collectionMongoDB - 获取集合每个值的每个字段的计数摘要
【发布时间】:2021-08-07 23:52:49
【问题描述】:

我想获取集合中每个值的每个字段的计数摘要。

示例:

一个集合可能包含以下文档架构和值:

{
    shop: A, B, C, D
    fruits: banana, apple, kiwi
    region: north, south, west, east
}

目标: 作为结果,我想获得一个文档,其中每个值的计数如下:

{
    shop: {
        A: 2,
        B: 5,
        C: 3,
        D: 1
    },
    fruits: {
        banana: 3,
        apple: 2,
        kiwi: 1
    }
    ...
}

mongo 怎么可能?

感谢您的帮助!

【问题讨论】:

    标签: mongodb aggregation-framework pymongo


    【解决方案1】:
    • $facet 将所有三个字段的结果分开
    • $project shop 仅限字段
    • $unwind解构shop数组
    • $group shop 并获取计数
    • $project 仅将键显示为shop,将值显示为count
    • 其他 2 个数组 fruitsregion 的处理相同
    • $arrayToObject 将键值数组转换为对象格式
    db.collection.aggregate([
      {
        $facet: {
          shop: [
            { $project: { shop: 1 } },
            { $unwind: "$shop" },
            { $group: { _id: "$shop", count: { $sum: 1 } } },
            { $project: { _id: 0, k: "$_id", v: "$count" } }
          ],
          fruits: [
            { $project: { fruits: 1 } },
            { $unwind: "$fruits" },
            { $group: { _id: "$fruits", count: { $sum: 1 } } },
            { $project: { _id: 0, k: "$_id", v: "$count" } }
          ],
          region: [
            { $project: { region: 1 } },
            { $unwind: "$region" },
            { $group: { _id: "$region", count: { $sum: 1 } } },
            { $project: { _id: 0, k: "$_id", v: "$count" } }
          ]
        }
      },
      {
        $project: {
          shop: { $arrayToObject: "$shop" },
          fruits: { $arrayToObject: "$fruits" },
          region: { $arrayToObject: "$region" }
        }
      }
    ])
    

    Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多