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 имеют правильное значение.