2016-05-02 4 views
1

У меня есть коллекция документов со следующей структурой:Как отсортировать массив по группировке

{ 
    "_id" : ObjectId("..."), 
    "group_id" : 1, 
    "value" : 4, 
    "date": "1970-01-01" 
} 

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

db.collection.aggregate({$group: {_id: "$group_id", count: {$sum: 1}, docs: {$push: "$$CURRENT"}}}) 

Как я могу заказать мои документы в моем массиве на основе, например value?

ответ

0

Вам необходимо сначала отсортировать документы по «группе», а затем по «значению» в порядке возрастания, используя оператор группового конвейера $sort.

db.collection.aggregate([ 
    { "$sort": { "group_id": 1, "value": 1 } }, 
    { "$group": { 
     "_id": "$group_id", 
     "count": { "$sum": 1 }, 
     "docs": { "$push": "$$CURRENT" } 
    }} 
]) 
Смежные вопросы