我想要这种格式的输出:
abc: [
{ a:' ', b:' ',
c:[ {c1:' ', c2:' '}, {c1:' ', c2:' '}, {c1:' ', c2:' '}]
},
{ a:' ', b:' ',
c:[ {c1:' ', c2:' '}, {c1:' ', c2:' '}, {c1:' ', c2:' '}]
}
]
对于此输出,我正在尝试此查询:
db.test.aggregate(
{
$group:
{
_id: "$clientId",
abc:{
$push:{
"a":"$a",
"b":"$b",
c:{
$addToSet:{
"c1":"$c1",
"c2":"$c2"
}
},
}
}
}
}
使用这个我只在结果数组中得到C数组,而不是A和B值。
请帮帮我。
答案 0 :(得分:0)
在聚合框架中需要使用两个group by子句,因为我们不能在同一个组块中创建两个数组。
以下是具有所需输出的查询:
db.test.aggregate(
{$group:{
_id:{"a": "$a","langName": "$b"},
c:{$addToSet:{
"c1":"$c1",
"c2":"$c2"
}}
}
}
,
{$group: {
_id: "$_id",
abc:{$addToSet:{
"a":"$_id.a", //gets the upper a element of _id of above group
"b":"$_id.b",
c:"$c" // gets the full array that has been formed in the above group by.
}
}
}
}
)
我一直在尝试使用$ a而不是$ _id.a这就是我遇到问题的原因。 这个查询解决了我的问题。 :)