2016-09-06 2 views
2

у меня MongoDB документ как:Сортировка данных в MongoDB на основе даты, встроенные в массив

{ 
    "_id":"fnbgfbmkgmbkgmbklhn", 
    "data":[ 
     { 
     "item":"ITEM1", 
     "date":ISODate("2016-09-06T13:38:44.714Z") 
     }, 
     { 
     "item":"ITEM2", 
     "date":ISODate("2016-09-06T13:50:44.714Z") 
     }, 
     { 
     "item":"ITEM3", 
     "date":ISODate("2016-09-06T13:45:44.714Z") 
     } 
    ] 
} 

Этот документ является результатом db.collectionName.aggregate (....). После применения агрегата, как сортировка может быть выполнена на основе «даты».

+0

Можете ли вы показать нам предыдущий конвейер агрегации, который дает результат выше? Из отмеченного возможного обмана вы можете просто вставить конвейер [** '$ sort' **] (https://docs.mongodb.com/manual/reference/operator/aggregation/sort/#pipe._S_sort) до который дает вам этот результат, поэтому было бы замечательно, если бы вы могли отредактировать свой вопрос, чтобы показать полный конвейер. – chridam

ответ

3

Вы можете размотать data массив, отсортировать результат по data.date и группой его снова _id:

[ 
    {$unwind: {path: "$data"}}, 
    {$sort: {"data.date": -1}}, 
    {$group: {_id: "$_id", data: {$push: {item: "$data.item", date: "$data.date"}}}} 
] 

Это может быть более эффективным, чтобы включить эти этапы в существующей агрегации трубопровода, а не просто добавляя их.

+0

Спасибо. Я действительно ценю твою помощь. – Krisalay

Смежные вопросы