MongoDB在聚合查询中获取第一个和最后一个文档

Mic*_*zuk 6 mongodb mongodb-query aggregation-framework mongodb-aggregation

如何根据time字段获取第一个和最后一个文档.我可以使用$group和获取$first$last记录,但我不需要在这里分组,只需获得第一个和最后一个完整的文档.也许我可以使用slice?此查询不起作用:

{
  "aggregate": "353469045637980_data",
  "pipeline": [
    {
      "$match": {
        "$and": [
          {
            "time": {
              "$gte": 1461369600
            }
          },
          {
            "time": {
              "$lt": 1461456000
            }
          }
        ]
      }
    },
    {
      "$project": {
        "first": {
          "$slice": 1
        },
        "last": {
          "$slice": -1
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

DAX*_*lic 18

嗯,你需要$group但你可以简单地使用一个常量(例如null,参见文档),id以便它产生一个单独的组.$$ ROOT然后引用您可以使用的文档本身,$first并且$last像这样

$group: {
  _id: null,
  first: { $first: "$$ROOT" },
  last: { $last: "$$ROOT" }
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以引入更多$project阶段来将数据整形为一个数组(如您所提到的,您想要一个列表)等.

作为旁注,您可能想要引入一个$sort阶段来确保$first$last具有正确的含义.