Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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独特查询_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

针对对象数组的MongoDB独特查询

针对对象数组的MongoDB独特查询,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,如果我有一个类似于以下内容的模式: { "_id" : "12345", "_class" : "Refrigerator", "items" : { "APPLE" : { "id" : 123, "name" : "APPLE" }, "BANANA" : { "id" : 234, "name" : "BANANA"

如果我有一个类似于以下内容的模式:

{
    "_id" : "12345",
    "_class" : "Refrigerator",
    "items" : {
        "APPLE" : {
            "id" : 123,
            "name" : "APPLE"
        },
        "BANANA" : {
            "id" : 234,
            "name" : "BANANA"
        },
        "STRAWBERRY" : {
            "id" : 345,
            "name" : "STRAWBERRY"
        }
    },
},
{
    "_id" : "23456",
    "_class" : "Pantry",
    "items" : {
        "CEREAL" : {
            "id" : 456,
            "name" : "CEREAL"
        }
    },
}
我想得到一个不同项目的列表,其中_class=冰箱。结果应该是
[“苹果”、“香蕉”、“草莓”]

我该怎么做?谢谢大家!

您可以使用聚合运算符
$objectToArray
()将键转换为值。它应该能够对“未知”或“动态”字段进行分组。该操作符在MongoDB v3.4.4中提供+

根据您的示例文档,您可以使用下面的

另请参见手册中的:、和


如果适用于您的用例,我建议您重新考虑,以便更容易地访问您所需的信息。MongoDB有一个灵活的模式,您应该使用它来为您的应用程序带来好处。

如果您可以将BSON存储在MongoDB中作为
{“items”:[{“id”:123,“name”:“APPLE”},{“id”:234,“name”:“BANANA”},{“id”:345,“name”:“草莓”}
db.collection.aggregate([
    {$match:{"class":"Refrigerator"}}, 
    {$project:{"items":{$objectToArray:"$items"}}}, 
    {$unwind:"$items"}, 
    {$group:{_id:"$_id", result:{$addToSet:"$items.k"}}}
])