Mongo DB - 嵌套/嵌入文档键的计数

时间:2021-06-11 14:18:43

标签: mongodb mongodb-query aggregation-framework aggregate

我正在尝试在集合中的文档中查找嵌入文档键的计数。例如:

doc1 = {
  field1: 'foo',
  field2: {
    12322 = {
      ...
    },
    244 = {
      ...
    },
    8791 = {
      ...
    }
  }
}

doc2 = {
  field1: 'bar',
  field2: {
    789 = {
      ...
    },
    244 = {
      ...
    },
    8791 = {
      ...
    },
    12 = {
      ...
    }
  }
}

我想运行一个聚合,在那里我可以获得这些键的数量。

结果

{
  12: 1,
  244: 2.
  789: 1,
  8791: 2,
  12322: 1
}

奖励:每个嵌入文档中的一个字段是日期字段,我最终需要过滤掉早于某个日期的对象。

1 个答案:

答案 0 :(得分:3)

你可以用聚合来做

  • $objectToArray 使对象成为键值对数组
  • $unwind 解构数组
  • $group 计算每个键的总和,下一组重新排列 $arrayToObjet 的键值对
  • $replaceRoot 使其成为根目录

这是代码

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

工作Mongo playground

相关问题