我有一个类似的mongo查询:
aggregate([
{ "$match": {"postId":postId}},
{
"$project": {
"f1":1,
"f2":1,
"f3":1,
"f4":1,
"_id":1,
"tempID" : { "$cond" : {<some condition>} }
}
},
{
"$group": {"_id" : "$tempID","maxVal" : { "$max": "$f2" }}
}])
问题是我希望查询返回原始文档中的所有字段。我不得不改变上面的查询,但重点是,一旦我到达$ group,我指定的字段就会被投射。我读到我可以使用$ first运算符将字段包含在$ group阶段。但是,我想知道是否有更好的方法可以做到这一点?就好像我不能使用另一个$项目然后嵌套$ group?
答案 0 :(得分:1)
您可以将每个项目推送到组投影中的数组,例如
aggregate([
{ "$match": {"postId":postId}},
{
"$project": {
"f1":1,
"f2":1,
"f3":1,
"f4":1,
"_id":1,
"tempID" : { "$cond" : {<some condition>} }
}
},
{
"$group": {
"_id" : "$tempID",
"maxVal" : { "$max": "$f2" }
"items": {$push: {
f1: "$f1",
f2: "$f2",
f3: "$f3",
f4: "$f4",
_id: "$_id"}
}
}])