Моя схема документа выглядит примерно так:
{
name: "John Doe",
City : "OK",
Prepaid: "Y",
Ethnicity: 'a',
Zip: '06516'
},
{
name: "Jane Doe",
City : "CA",
Prepaid: "N",
Ethnicity: 'b'
Zip: '12321'
},
{
name: "Jule Doe",
City : "OK",
Prepaid: "N",
Ethnicity: 'a'
Zip: '06516'
},
{
name: "Jake Doe",
City : "OK",
Prepaid: "Y",
Ethnicity: 'a',
zip: '06516'
}
Я пытаюсь сгруппировать их по нескольким уровням и рассчитать их на основе этого. Единственное предостережение - фильтры для группировки аргументов могут быть чем угодно из документа.
То, что я хочу получить, будет выглядеть примерно так:
Если пользователь выберет группировать их по городам и предоплате, то это будет выглядеть так:
{
City : OK
Count : {
"filter": prepaid,
"count": {
Y : 2
N: 1
}
}
}
{
City : CA
Count : {
"filter": prepaid,
"count": {
Y : 0
N: 1
}
}
}
Но если пользователь выберет Этническая принадлежность и Предоплата, это будет выглядеть примерно так:
{
Ethinicity : A,
City: OK
Count : {
"filter": prepaid,
"count": {
Y : 2
N: 1
}
}
}
{
Ethinicity : B,
City: CA
Count : {
"filter": prepaid,
"count": {
Y : 1
N: 0
}
}
}
Я попытался сделать это:
const countVals = await PhoneSamplingCollection.aggregate([
{ $match: fullQuery },
{$group: groupquery //variable that has object provided by user to group on
, count:{$sum:1}}}
]).exec();
Это дает мне только счет вместе, а не разбивку.