Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo计数未知数量的字段标签_Mongodb - Fatal编程技术网

Mongodb Mongo计数未知数量的字段标签

Mongodb Mongo计数未知数量的字段标签,mongodb,Mongodb,假设我有以下结构: "KnownName" : { "unknownName1" : { "id" : "unknownName1", "value" : "5" }, "unknownName2" : { "id" : "unknownName2", "value" : "5" }, "unknownName3" : { "id" : "unknownName3",

假设我有以下结构:

"KnownName" : {
    "unknownName1" : {
        "id" : "unknownName1",
        "value" : "5"
    },
    "unknownName2" : {
        "id" : "unknownName2",
        "value" : "5"
    },
    "unknownName3" : {
        "id" : "unknownName3",
        "value" : "5"
    },
    "unknownName4" : {
        "id" : "unknownName4",
        "value" : "5"
    },
    "unknownName5" : {
        "id" : "unknownName5_v2",
        "value" : "5"
    },
    "unknownName6" : {
        "id" : "unknownName6",
        "value" : "5"
    }

... many more documents as above in various ways
我想把所有这些计算如下:

unknownName1 : 24
unknownName2 : 27
unknownName3 : 10
....
unknownName37 : 12
我确实知道“KnownName”节点上的结构,但是在这个节点中,我可以有几个不同的标签(这里是unknownName 1到6),但是可以有或多或少的标签,并且它们可以根据文档而有所不同。通常,数组中的id与数组标签具有相同的名称,但它不是给定的(如unknownName5)

我一直在寻找方法,以获得所有这些“未知”的明确计数,但这似乎比预期的更具挑战性

关于如何实现这一点的任何建议(最好使用聚合框架)

如果有一种简单的方法可以在“KnownName”树中将所有(深层的)子级标记为“id”,而不需要知道未知的父级名称,那么它也适用于我。我知道mongo中没有通配符,但我正在寻找KnownName.*.id之类的替代品,因为您的密钥未知,所以您需要从它开始。然后,您将获得一个键和值的数组,可以使用来处理这些键和值以获取计数。还可以使用和在根对象中获取动态关键点

db.col.aggregate([
    {
        $addFields: {
            unknown: { $objectToArray: "$KnownName" }
        }
    },
    {
        $unwind: "$unknown"
    },
    {
        $group: {
            _id: "$unknown.k",
            count: { $sum: 1 }
        }
    },
    {
        $sort: { _id: 1 }
    },
    {
        $group: {
            _id: null,
            data: { $push: { k: "$_id", v: "$count" } }
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $arrayToObject: "$data"
            }
        }
    }
])