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

问题描述:

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

{ 
    "aggregate": "353469045637980_data", 
    "pipeline": [ 
    { 
     "$match": { 
     "$and": [ 
      { 
      "time": { 
       "$gte": 1461369600 
      } 
      }, 
      { 
      "time": { 
       "$lt": 1461456000 
      } 
      } 
     ] 
     } 
    }, 
    { 
     "$project": { 
     "first": { 
      "$slice": 1 
     }, 
     "last": { 
      "$slice": -1 
     } 
     } 
    } 
    ] 
} 
+1

第一个和最后一个值是什么?你可以更具体一些,也许包括一堆测试文件和你的预期输出? – chridam

+0

我期待列出两个条目[第一,最后]。首先和最后是收集完整的文件 –

那么你需要$group但你可以简单地用一个常数(例如null,见the docs)为其id,使其结果在一个组。 $$ROOT然后是指可以用$first$last使用像这样

$group: { 
    _id: null, 
    first: { $first: "$$ROOT" }, 
    last: { $last: "$$ROOT" } 
} 

当然,你可以引入进一步的$project阶段数据塑造成一个阵列(你提到要列表)文件本身等

作为便笺,您可能需要引入$sort阶段以确保$first$last具有适当的含义。