Сортировка по максимальному полю массива, по возрастанию или по убыванию
В моем приложении Meteor у меня есть коллекция документов с массивом поддокументов, которые выглядят так:
/* 1 */
{
"_id" : "5xF9iDTj3reLDKNHh",
"name" : "Lorem ipsum",
"revisions" : [
{
"number" : 0,
"comment" : "Dolor sit amet",
"created" : ISODate("2016-02-11T01:22:45.588Z")
}
],
"number" : 1
}
/* 2 */
{
"_id" : "qTF8kEphNoB3eTNRA",
"name" : "Consecitur quinam",
"revisions" : [
{
"comment" : "Hoste ad poderiquem",
"number" : 1,
"created" : ISODate("2016-02-11T23:25:46.033Z")
},
{
"number" : 0,
"comment" : "Fagor questibilus",
"created" : ISODate("2016-02-11T01:22:45.588Z")
}
],
"number" : 2
}
Что я хочу сделать, это запросить эту коллекцию и отсортировать набор результатов помаксимальная дата вcreated
полеrevisions
массив. Что-то, что я еще не смог осуществить. Вот некоторые ограничения:
revisions.created
не вырезать, потому что дата, используемая из коллекции, зависит от направления сортировки. Я должен использоватьмаксимальная дата в наборе независимо от порядка сортировки.Я не могу полагаться на манипулирование после запроса несортированным набором результатов, поэтому это должно быть сделано путем правильного запроса или агрегирования в базе данных.Там нет никакой гарантии, чтоrevisions
массив будет предварительно отсортирован.В некоторых документах могут быть дополнительные поля, и они должны быть вместе, поэтому$project
.Метеор все еще использует MongoDB 2.6, новые функции API не годятся :(