不确定我在这里使用的是正确的术语,而是假设遵循以下Mongo中过于简化的JSON结构:
{
"_id": 1234,
"labels": {
"label1": {
"id": "l1",
"value": "abc"
},
"label3": {
"id": "l2",
"value": "def"
},
"label5": {
"id": "l3",
"value": "ghi"
},
"label9": {
"id": "l4",
"value": "xyz"
}
}
}
{
"_id": 5678,
"labels": {
"label1": {
"id": "l1",
"value": "hjk"
},
"label5": {
"id": "l5",
"value": "def"
},
"label10": {
"id": "l10",
"value": "ghi"
},
"label24": {
"id": "l24",
"value": "xyz"
}
}
}
我知道我的基本元素名称(在示例中为标签),但是我不知道我可以拥有的各种子元素(因此在本例中为labelx名称)。
如何对现有元素进行分组/计数(就像我将使用通配符一样),这样我将获得一些独特的概述,例如
"label1":2
"label3":1
"label5":2
"label9":1
"label10":1
"label24":1
结果是?到目前为止,我只发现了一些您实际上需要知道元素名称的示例。但是我不了解它们,想要找到某种方法来获取给定顶部元素的所有可能的子元素名称,以便于检查。
实际上,标签名称可能非常荒谬,在示例中,我使用labelx来提高可读性。
答案 0 :(得分:1)
您可以尝试在3.4中进行以下汇总。
使用$objectToArray
将对象转换为键值对的数组,然后将键上的$unwind
和$group
转换为计数次数。
db.col.aggregate([
{"$project":{"labels":{"$objectToArray":"$labels"}}},
{"$unwind":"$labels"},
{"$group":{"_id":"$labels.k","count":{"$sum":1}}}
])