2015-03-02 72 views
0

我有这个集合...如何用这个命令得到这个查询MongoDB中

> 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

一个你可以去这个问题的方法是做一个$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 
}