2015-04-23 4 views
1

В MySQL я хотел бы использовать агрегатную функцию для получения записей, сгруппированных по дате:Возврат документов, сгруппированных по дате в MongoDB

SELECT COUNT(id), DATE(created_at) creation FROM records GROUP BY creation; 

+-----------+------------+ 
| COUNT(id) | creation | 
+-----------+------------+ 
|  10 | 2015-04-22 | 
+-----------+------------+ 
|  5 | 2015-11-22 | 
+-----------+------------+ 

Как я мог достичь того же самого в MongoDB, учитывая, что у меня есть идентификатор и created_at колонка, а также:

db.contacts.find() 
{ "_id" : ObjectId("55394a8c6d616386e3020000"), "name" : "sfdsf fddfgfdg", "email" : "[email protected]", "fax" : "", "birth_date" : null, "phone" : "453454564", "phone_2" : "", "updated_at" : ISODate("2015-04-23T19:39:56.966Z"), "created_at" : ISODate("2015-04-23T19:39:56.966Z") } 

ответ

2

Агрегат с использованием $group aggregation command. Группировка по дате, а не по DateTime, вы можете использовать операторы для извлечения year, month и day:

[ 
    { 
    "$group" : { 
     "_id" : { month: { $month: "$date" }, 
       day: { $dayOfMonth: "$date" }, 
       year: { $year: "$date" } }, 
     "count" : { $sum: 1 } 
    } 
    } 
] 
0

Вы можете использовать aggregation framework для этого.

db.contacts.aggregate([ 
    {$group: {_id: "$created_at", count: {$sum: 1}}} 
]);