Как вернуть элементы с самой последней датой в MongoDB - PullRequest
0 голосов
/ 29 января 2019

На MongoDB, как я могу выбрать элементы с самой последней датой из этого списка:

[{
"_id" : ObjectId("5c5064f39d0c4b52cf6d1d55"),
"Date" : "12-09-2018",
"Type" : "A",
"Value" : 73650.14
},
{
"_id" : ObjectId("5c5064f39d0c4b52cf6d1d15"),
"Date" : "12-09-2018",
"Type" : "B",
"Value" : 73650.14
},
{
"_id" : ObjectId("5c5064f39d0c4b52cf6d1d58"),
"Date" : "13-09-2018",
"Type" : "A",
"Value" : 80000
},
{
"_id" : ObjectId("5c5064f39d0c4b52cf6d1d56"),
"Date" : "13-09-2018",
"Type" : "B",
"Value" : 800000
}]

Чтобы получить этот список:

[{
"_id" : ObjectId("5c5064f39d0c4b52cf6d1d58"),
"Date" : "13-09-2018",
"Type" : "A",
"Value" : 80000
},
{
"_id" : ObjectId("5c5064f39d0c4b52cf6d1d56"),
"Date" : "13-09-2018",
"Type" : "B",
"Value" : 800000
}]

Это, вероятно, легко, ноЯ просто не могу сделать это, несмотря на многие исследования.Я пытался сделать это с помощью оператора $ group, но я так и не нашел, как выдвинуть нужные значения (я только получил Date или все элементы без какого-либо фильтра).

Я новичок в DB Mongo, и ябыл бы очень признателен за вашу помощь.

Спасибо

1 Ответ

0 голосов
/ 29 января 2019

Следующий запрос для MongoDB 3.6 добавляет новое поле даты к каждому документу, группирует по этому полю и помещает документы этой группы в массив, сортирует по _id (дате) в порядке убывания, ограничивает первый документ (большинствопоследняя дата), раскручивает массив документов, а затем очищает результат, заменяя корень каждого документа и проецируя исходные поля.

db.colx.aggregate([{
  $addFields: {
    ISODate: {
      $dateFromString: {
        dateString: "$Date"
      }
    }
  }
}, {
  $group: {
    _id: "$ISODate", 
    items: {
      $push: "$$ROOT"
    }
  }
}, {
  $sort: {
    _id: -1
  }
}, {
  $limit: 1
}, {
  $unwind: "$items"
}, {
  $replaceRoot: {
    newRoot: "$items"
  }
}, {
  $project: {
    _id: 1, 
    Date: 1, 
    Type: 1, 
    Value: 1
  }
}])

Вывод:

{ "_id" : ObjectId("5c5064f39d0c4b52cf6d1d58"), "Date" : "13-09-2018", "Type" : "A", "Value" : 80000 }
{ "_id" : ObjectId("5c5064f39d0c4b52cf6d1d56"), "Date" : "13-09-2018", "Type" : "B", "Value" : 800000 }
...