2015-02-11 2 views
0

Довольно новый для Mongodb, и я пытаюсь построить запрос с использованием Mongoose, чтобы получить желаемый результат, если это возможно.Любой способ группировать результат запроса Mongodb по столбцу?

Тестовые данные:

{ id: 1, display_time: '01:00', name: 'test1' }, 
{ id: 2, display_time: '03:00', name: 'test2' }, 
{ id: 3, display_time: '01:00', name: 'test3' }, 
{ id: 4, display_time: '04:00', name: 'test4' }, 
{ id: 5, display_time: '01:00', name: 'test5' } 

Желаемый результат:

{ 
    "01:00": [ 
    { id: 1, display_time: '01:00', name: 'test1' }, 
    { id: 3, display_time: '01:00', name: 'test3' }, 
    { id: 5, display_time: '01:00', name: 'test5' } 
    ], 
    "03:00": [ 
    { id: 2, display_time: '03:00', name: 'test2' } 
    ], 
    "04:00": [ 
    { id: 4, display_time: '04:00', name: 'test4' } 
    ], 
} 

В основном это группирует документы, основанные на display_time поле и возвращает его в этом формате. Возможно ли это с Монго?

ответ

1

Вы можете попробовать Somthing так:

db.collection.aggregate(
    [ 
    { $group : { _id : "$display_time", test: { $push: "$$ROOT" } } } 
    ] 
) 

{ 
    "_id" : "01:00", 
    "test" : 
    [ 
     { id: 1, display_time: '01:00', name: 'test1' }, 
     { id: 3, display_time: '01:00', name: 'test3' } 
    ] 
} 

{ 
    "_id" : "04:00", 
    "test" : 
    [ 
     { id: 4, display_time: '04:00', name: 'test4' } 
    ] 
} 

Информацию Moar http://docs.mongodb.org/manual/reference/operator/aggregation/group/

+0

Спасибо, это работает. Есть ли способ отсортировать массив 'test' на основе одного из его ключей объекта? Пример: каждый массив 'test' сортируется по' ​​name' в порядке убывания? Я проверил документы, но не знаю, понимаю ли я. – Brandon

+1

@Brandon, см. Править выше. Я добавил решение для сортировки внутреннего массива. –

+0

Спасибо @HowardLee, но я не вижу вашего редактирования? – Brandon

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