Подтвердить что ты не робот

Внутренний массив сортировки Mongodb

Я искал какое-то время и не могу сортировать внутренний массив и хранить это в документе, с которым я сейчас работаю.

{
    "service": {
        "apps": {
            "updates": [
              {
                "n" : 1
                "date": ISODate("2012-03-10T16:15:00Z")
              },
              {
                "n" : 2
                "date": ISODate("2012-01-10T16:15:00Z")
              },
              {
                "n" : 5
                "date": ISODate("2012-07-10T16:15:00Z")
              }
            ]
        }
     }
 }

Итак, я хочу, чтобы элемент возвращался в качестве службы, но мой массив обновлений отсортирован. Пока у оболочки есть:

db.servers.aggregate(
        {$unwind:'$service'},
        {$project:{'service.apps':1}},
        {$unwind:'$service.apps'}, 
        {$project: {'service.apps.updates':1}}, 
        {$sort:{'service.apps.updates.date':1}});

Кто-нибудь думает, что они могут помочь в этом?

4b9b3361

Ответ 1

Вы можете сделать это с помощью $unwind массива updates, отсортировав результирующие документы date, а затем $group объединив их на _id, используя отсортированный порядок.

db.servers.aggregate(
    {$unwind: '$service.apps.updates'}, 
    {$sort: {'service.apps.updates.date': 1}}, 
    {$group: {_id: '$_id', 'updates': {$push: '$service.apps.updates'}}}, 
    {$project: {'service.apps.updates': '$updates'}})