我有以下结构的文档。{ name: "John Doe", City : "OK", Prepaid: "Y"},{ name: "Jane Doe", City : "CA", Prepaid: "N"},{ name: "Jule Doe", City : "OK", Prepaid: "N"},{ name: "Jake Doe", City : "OK", Prepaid: "Y"}我想先根据城市对它进行分组,然后再对预付费进行分组,并获得每种预付费类型的单独计数。看起来与此类似的东西。{ City : OK Count : { "filter": prepaid, "count": { Y : 2 N: 1 } }}{ City : CA Count : { "filter": prepaid, "count": { Y : 0 N: 1 } }}我尝试基于多个字段进行聚合,它给了我文档的总数而不是故障。这是我为聚合管道尝试的内容:db.collection.aggregate([ {$match:matchquery },{$group:{_id:{city: '$city', prepaid: '$prepaid' }, count:{$sum:1} }}])
1 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
您可以运行$group两次以prepaid首先计数,然后您可以应用$arrayToObject来获取Y/N对象键:
db.collection.aggregate([
{
$group: {
_id: { city: "$City", prepaid: "$Prepaid" },
total: { $sum: 1 }
}
},
{
$grop: {
_id: "$_id.city",
Count: {
$push: {
k: "$_id.prepaid", v: "$total"
}
}
}
},
{
$project: {
_id: 0,
city: "$_id",
Count: { $mergeObjects: [ { filter: "prepaid" }, { count: { $arrayToObject: "$Count" } } ] }
}
}
])
添加回答
举报
0/150
提交
取消
