2016-05-02 2 views
0

С aggregate я получить все мои данные, сгруппированных в день, таким образом:Совокупные группа внутри группы в MongoDB

db.collection('checkpoint').aggregate 
[ 
    { '$match': {'id_journey': journey.id_journey} }, 
    { '$sort': { 'when': 1} }, 
    { 
     '$group': { 
      '_id': { $dateToString: { format: '%Y-%m-%d', date: '$when' } }, 
      'day': {          
       '$push': { 
        'id': '$id_checkpoint', 
        'when': '$when', 
        'type': '$type', 
        'url_media': '$url_media' 
       } 
      } 
     } 
    }, 
    { '$sort': { '_id': 1 } }, 
    { 
     '$project': { 
      '_id': 1, 
      'day': 1 
     } 
    } 
], function(err, result) { 
    res.json(result); 
}); 

и результат:

[{ 
    _id: "2016-04-22", 
    day: [{ 
     id: "c571be034449bee845f2b43211", 
     when: "2016-04-22T20:51:00.190Z", 
     type: "picture", 
     url_media: "my_photo_1.jpg" 
    }] 
}, { 
    _id: "2016-04-23", 
    day: [{ 
     id: "c571be034449bee845f2b43222", 
     when: "2016-04-23T20:50:00.190Z", 
     type: "picture", 
     url_media: "my_photo_2.jpg" 
    }, { 
     id: "c571be034449bee845f2b43233", 
     when: "2016-04-23T20:51:00.190Z", 
     type: "picture", 
     url_media: "my_photo_3.jpg" 
    }] 
}] 

это правильно.

Но что, если мне нужно группировать в течение часа (используя $hourDate Aggregation Operators of MongoDB) внутри каждого дня? Желаемый результат состоит в том, что каждая дневная группа подразделяется на группы часов: это возможно?

+0

Пример того, как вы хотите, чтобы ваш вывод в loo был бы полезен – lascort

+1

может быть, это поможет вам http://stackoverflow.com/a/24318623/2782784 – achuth

+0

@achuth точно, спасибо вы много ооо –

ответ

0

Да, вы можете это сделать. Сначала вы должны проектировать час. Теперь у вас есть часовое поле в конвейере агрегации. Вы можете легко сгруппировать по часовому полю

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