Получить запись с самой высокой датой во вложенной группе в Mongodb - PullRequest
1 голос
/ 02 мая 2020

У меня есть набор записей, как показано ниже:

enter image description here

Мне нужно написать запрос, где foreach тип данных каждого родителя я показываю тип данных с наивысшей датой, т.е.

enter image description here

Пока я могу создать две группы, одну по родительскому идентификатору, а другую по типу данных, но я не могу понять, как чтобы получить запись с максимальной датой. Ниже мой запрос:

db.getCollection('Maintenance').aggregate( [{ $group : 
{ _id :{ parentName: "$ParentID" , maintainancename : "$DataType" }}},
{ $group : { 
      _id :  "$_id.parentName",
      maintainancename: { 
          $push: { 
              term:"$_id.DataType"
              }
      }
   }
 }] )

1 Ответ

0 голосов
/ 02 мая 2020

Вам не нужно $group дважды, попробуйте выполнить запрос агрегации ниже:

db.collection.aggregate([
  /** group on two fields `ParentID` & `Datatype`,
   * which will leave docs with unique `ParentID + Datatype` 
   * & use `$max` to get max value on `Date` field in unique set of docs */
  {
    $group: {
      _id: {
        parentName: "$ParentID",
        maintainancename: "$Datatype"
      },
      "Date": { $max: "$Date" }
    }
  }
])

Тест: mongoplayground

Примечание: После группового этапа вы можете использовать $project или $addFields этапы для преобразования полей так, как вы хотите.

...