Mongodb Group этап, и запросить два последних документа

В mongodb, если мы хотим взять первый или последний документ группового этапа, то вам пригодятся операторы FIRST и LAST. Я хочу сгруппировать коллекцию на основе _id: "$ Department", а также взять документ LAST и документ LAST-1. Есть ли способ добиться этого.

Всего 1 ответ


Предположим, у вас есть эта коллекция:

[
  { department: "HR", employees: 20 },
  { department: "Finance", employees: 30 },
  { department: "Sales", employees: 5 },
  { department: "IT", employees: 50 }
]

Затем вы можете запустить эту агрегацию:

db.collection.aggregate([
   { $sort: { department: 1 } },
   {
      $group: {
         _id: null,
         employees: { $sum: "$employees" },
         all_departments: { $push: "$department" }
      }
   },
   {
      $set: {
         last_departments: {
            $concatArrays: [
               [{ $arrayElemAt: ["$all_departments", -1] }],
               [{ $arrayElemAt: ["$all_departments", -2] }]
            ]
         }
      }
   }
])

Монго Детская площадка

Обновить

С $ slice это еще короче:

db.collection.aggregate([
   { $sort: { department: 1 } },
   {
      $group: {
         _id: null,
         employees: { $sum: "$employees" },
         all_departments: { $push: "$department" }
      }
   },
   { $set: { last_departments: { $slice: ["$all_departments", -2] } } }
]) 

Есть идеи?

10000