MongoDB在$ group中投射字段

时间:2016-12-02 06:12:43

标签: mongodb mongodb-query

我有一个类似的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?

1 个答案:

答案 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"}
    }
  }])