如何在mongoDB中获取此查询

时间:2015-03-02 12:06:35

标签: mongodb database

我有这个系列......

> db.banks.find().pretty()
{
        "_id" : ObjectId("54f37cbb44aec3b01b7db8f4"),
        "name" : "A",
        "branches" : [
                {
                        "branch_id" : 8561,
                        "name" : "X",                            
                },
                {
                        "branch_id" : 8576,
                        "name" : "Y",                            
                }
        ]
}
{
        "_id" : ObjectId("54f37cbb44aec3b01b7db8f5"),
        "name" : "B",
        "branches" : [
                {
                        "branch_id" : 3238,
                        "name" : "Z",                            
                }
        ]
}

使用此命令:

db.banks.aggregate({$project{"branches.name":1,"_id":0}});

得到这个结果:

{ "branches" : { { "name" : "X" }, { "name" : "Y" } } }
{ "branches" : { { "name" : "Z" } } }

但;我怎么得到这个结果? (事实上​​,一个对象而没有“分支”。)

{{"name" : "X"}, {"name" : "Y"}, {"name" : "Z"}}
非常感谢...

1 个答案:

答案 0 :(得分:1)

你可以解决这个问题的一种方法是首先在聚合管道中执行$unwind以获得一个解构数组,其中包含每个元素的文档,然后按数组元素$branches.name分组:

db.banks.aggregate([
    { $unwind: '$branches'},
    {
        $group: {
            _id: {
                name: '$branches.name'
            }
        }
    },
    {
        $project: {
            _id: 0,
            name: '$_id.name'
        }
    },
    { $sort : { "name" : 1 } }
])

输出:

{
    "result" : [ 
        {
            "name" : "X"
        }, 
        {
            "name" : "Y"
        }, 
        {
            "name" : "Z"
        }
    ],
    "ok" : 1
}