Это как моя структура коллекции выглядит следующим образом:Group и сумма изо дня в день
{
"_id" : ObjectId("57589d2a9108dace306602b8"),
"IDproject" : NumberLong(53),
"email" : "[email protected]",
"dc" : ISODate("2016-06-06T22:33:13.000Z")
}
{
"_id" : ObjectId("57589d2a9108dace306602b8"),
"IDproject" : NumberLong(53),
"email" : "[email protected]",
"dc" : ISODate("2016-06-07T22:33:13.000Z")
}
{
"_id" : ObjectId("57589d2a9108dace306602b8"),
"IDproject" : NumberLong(53),
"email" : "[email protected]",
"dc" : ISODate("2016-06-078T22:33:13.000Z")
}
Как вы можете видеть, есть два клиента добавлено 7 июня и один на 6 июня. Я хотел бы группировать и суммировать эти результаты за последние 30 дней.
Это должно выглядеть примерно так:
{
"dc" : "2016-06-05"
"total" : 0
}
{
"dc" : "2016-06-06"
"total" : 1
}
{
"dc" : "2016-06-07"
"total" : 2
}
As, вы можете видеть, нет никаких записей по 6 июня, так что это ноль. Она должна быть равна нулю для 5-го июня, и т.д.
Это было бы дело № 1, а дело № 2 являются следующие результаты:
{
"dc" : "2016-06-05"
"total" : 0
}
{
"dc" : "2016-06-06"
"total" : 1
}
{
"dc" : "2016-06-07"
"total" : 3
}
Я попытался это:
db.getCollection('customer').aggregate([
{$match : { IDproject : 53}},
{ $group: { _id: "$dc", total: { $sum: "$dc" } } }, ]);
Но кажется сложным. Я впервые работаю с базой данных noSQL.
Спасибо.
Хорошо. Это намного лучше: 'db.getCollection ('customer'). Aggregate ([ {$ match: {IDproject: 53}}, {$ group: {_id:" $ dc ", всего: {$ sum : 1}}}, ]); ' Просто нужно выяснить, как добавить ноль к общему числу, и получить только последние 30 дней, но случай 2 # все еще там. – Nedim
Почему вы заботитесь о днях за последние 30 дней, когда нет записи? – styvane
Потому что мне нужно показать это на графике. – Nedim