我有这个系列......
> 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"}}
非常感谢...
答案 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
}