如何获取 mongoDB 集合中特定字段的所有值的数组?

Рос*_*лко 6 mongodb mongodb-query aggregation-framework

我在 mongoDB 中有这样的模式

{
    "key":"ru",
    "regions":[
        {
            "name":"moskovskaya",
            "cities":[
                {
                    "name":"moskva"
                },
                {
                    "name":"tula"
                }
            ]
        },
        {
            "name":"piterskaya",
            "cities":[
                {
                    "name":"piter"
                },
                {
                    "name":"luga"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我有一些针对不同国家的此类架构的文档,如何从该架构的每个文档中获取所有城市的数组?

sty*_*ane 8

这是一个简单的查询。该distinct()方法将完美地完成工作。

db.collection.distinct("regions.cities.name")
Run Code Online (Sandbox Code Playgroud)

您生产的:

[ "luga", "moskva", "piter", "tula" ]
Run Code Online (Sandbox Code Playgroud)


chr*_*dam 4

运行以下聚合管道:

db.collection.aggregate([
    { "$unwind": "$regions" },
    { "$unwind": "$regions.cities" },
    {
        "$group": {
            "_id": null,
            "cities": { "$push": "$regions.cities.name" }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

样本输出

{
    "result" : [ 
        {
            "_id" : null,
            "cities" : [ 
                "moskva", 
                "tula", 
                "piter", 
                "luga"
            ]
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)