MongoDB—获取集合中每个值的每个字段的计数摘要

MongoDB—获取集合中每个值的每个字段的计数摘要,mongodb,aggregation-framework,pymongo,Mongodb,Aggregation Framework,Pymongo,我想获得集合中每个值的每个字段的计数摘要 示例: 集合可能包含以下文档架构和值: { shop: A, B, C, D fruits: banana, apple, kiwi region: north, south, west, east } 目标: 我希望得到一个单独的文档,每个值的计数如下: { shop: { A: 2, B: 5, C: 3, D: 1 }, fruits:

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

示例:

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

{
    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怎么可能做到这一点

谢谢你的帮助

  • $facet
    以分离所有三个字段的结果
  • $project
    shop
    仅限字段
  • $unwind
    解构
    shop
    数组
  • $group
    通过
    购物
    获得计数
  • $project
    仅显示键为
    shop
    和值为
    count
  • 处理其他两个数组
    区域
  • $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" }
    }
  }
])