2

如何根據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

我期待列出兩個條目[第一,最後]。首先和最後是收集完整的文件 –

回答

7

那麼你需要$group但你可以簡單地用一個常數(例如null,見the docs)爲其id,使其結果在一個組。 $$ROOT然後是指可以用$first$last使用像這樣

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

當然,你可以引入進一步的$project階段數據塑造成一個陣列(你提到要列表)文件本身等

作爲便箋,您可能需要引入$sort階段以確保$first$last具有適當的含義。

相關問題