Пока вы новичок в MongoDB, правильно понимайте стадию агрегирования mongoDB ... и это то же самое, что вы пытаетесь делать со своими данными. Поскольку у меня нет ваших данных, я подал вам один пример. и дает вам понимание этапов агрегирования.
рассмотрите данные такого типа.
{
"_id" : ObjectId("5db368e9d130deb5c19f35c8"),
"role" : "cus",
"created" : 1
}
{
"_id" : ObjectId("5db36913d130deb5c19f35c9"),
"role" : "cus",
"created" : 1
}
{
"_id" : ObjectId("5db36926d130deb5c19f35ca"),
"role" : "support",
"created" : 5
}
{
"_id" : ObjectId("5db36929d130deb5c19f35cb"),
"role" : "support",
"created" : 5
}
{
"_id" : ObjectId("5db37bcfd130deb5c19f35cc"),
"role" : "support",
"created" : 5
}
, а затем Первый этап - $ match вaggregate.
db.counts.aggregate([ { $match: { created: {$gte:1} } } ])
на этом этапе все данные созданного> = 1 передаются на следующий этап, который является этапом $ group. и результат $ match stage равен.
{ "_id" : ObjectId("5db368e9d130deb5c19f35c8"), "role" : "cus", "created" : 1 }
{ "_id" : ObjectId("5db36913d130deb5c19f35c9"), "role" : "cus", "created" : 1 }
{ "_id" : ObjectId("5db36926d130deb5c19f35ca"), "role" : "support", "created" : 5 }
{ "_id" : ObjectId("5db36929d130deb5c19f35cb"), "role" : "support", "created" : 5 }
{ "_id" : ObjectId("5db37bcfd130deb5c19f35cc"), "role" : "support", "created" : 5 }
, а затем второй этап $ group получает эти данные. и этап ...
db.counts.aggregate([{ $match: { created: { $gte:1 }} },{ $group: { _id: "$role", count: {$sum:1} } }])
выше этапа фильтрует группы данных по ролям и подсчитывает количество данных. и приведите результаты, приведенные ниже ...
{ "_id" : "support", "count" : 3 }
{ "_id" : "cus", "count" : 2 }
Итак, следующий этап $ project получает только результаты выше группового этапаи $ этап проекта равен
db.counts.aggregate([{ $match: { created: { $gte:1 }} },{ $group: { _id: "$role", count: {$sum:1} } },{ $project:{ Multi : { $multiply: [ "$count", 100000 ] }} }])
, а последний этап дает результаты ...
{ "_id" : "support", "Multi" : 300000 }
{ "_id" : "cus", "Multi" : 200000 }
Теперь рассмотрим вашу проблему , вваш этап $ group вы возвращаете только тип поля _id на этап $ projection. и решение этой проблемы ...
db.counts.aggregate([{ $match: { created: { $gte:1 }} },{ $group: { _id:{Role: "$role",Created: "$created"} } },{ $project:{ Multi : { $multiply: [ "$_id.Created", 100000 ] }} }])