MongoDB在$group中投影字段

MongoDB在$group中投影字段,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个类似以下内容的mongo查询: aggregate([ { "$match": {"postId":postId}}, { "$project": { "f1":1, "f2":1, "f3":1, "f4":1, "_id":1, "tempID" : { "$cond" : {<some condition>} }

我有一个类似以下内容的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" }}
      }])
聚合([
{“$match”:{“postId”:postId},
{ 
“$project”:{
“f1”:1,
“f2”:1,
“f3”:1,
“f4”:1,
“_id”:1,
“tempID”:{“$cond”:{}
}
},
{
“$group”:{“_id”:“$tempID”,“maxVal”:{“$max”:“$f2”}”
}])

问题是我希望查询返回原始文档中的所有字段。我不得不更改上面的查询,但问题是,一旦我进入$group,就只能投影我指定的字段。我读到我可以使用$first操作符在$group阶段将字段重新包含进去。但是我想知道是否有更好的方法?例如,如果我不能使用另一个$project,然后嵌套$group?

您可以将每个项目推入到group projection中的一个数组中,例如

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"}
    }
  }])
聚合([
{“$match”:{“postId”:postId},
{ 
“$project”:{
“f1”:1,
“f2”:1,
“f3”:1,
“f4”:1,
“_id”:1,
“tempID”:{“$cond”:{}
}
},
{
“$group”:{
“_id”:“$tempID”,
“maxVal”:{“$max”:“$f2”}
“项目”:{$push:{
f1:“$f1”,
f2:“$f2”,
f3:“$f3”,
f4:“$f4”,
_id:“$\u id”}
}
}])

在您的情况下,没有其他选择,主要是因为
$group
阶段。好的,Styvane,谢谢您提供的信息,我只是想知道这是正确的方式。干杯