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



我试图在集合中的文档中找到一个嵌入文档键的计数。例如:

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
}

额外的好处是:每个嵌入文档中的一个字段都是日期字段,我最终需要筛选出比某个日期更早的对象。

您可以使用聚合

  • $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游乐场

最新更新