mongodb - 在 MongoDB 组之后选择每个字段的前 3 个
问题描述
我有一个包含“servicereqesttype”、“zipcode”、“date”等字段的集合
我想查找特定日期每个邮政编码的 3 个最常见的“服务请求类型”。
db.event.aggregate([
{
$match: {
creationdate: "2011-01-01"
}
},
{
$project: {
zipcode: "$zipcode",
servicerequesttype: "$servicerequesttype"
}
},
{
$group: {
_id: {
zipcode: "$zipcode",
servicerequesttype: "$servicerequesttype"
},
zipcode: {
$first: "$zipcode"
},
servicerequesttype: {
$first: "$servicerequesttype"
},
count: {$sum: 1}
}
},
{
$sort: {
"zipcode": -1,
"count": -1
}
},
{
$project: {
_id: 0,
zipcode: "$zipcode",
servicerequesttype: "$servicerequesttype",
count: "$count"
}
}
])
现在我所要做的就是每个邮政编码只选择 3 个,我需要一些帮助,也许我必须使用 $bucket 或 $map ...
解决方案
db.event.aggregate([
{
$match: {
creationdate: "2011-01-01"
}
},
{
$project: {
zipcode: "$zipcode",
servicerequesttype: "$servicerequesttype"
}
},
{
$group: {
_id: {
zipcode: "$zipcode",
servicerequesttype: "$servicerequesttype"
},
zipcode: {
$first: "$zipcode"
},
servicerequesttype: {
$first: "$servicerequesttype"
},
count: {$sum: 1}
}
},
{
$sort: {
"zipcode": -1,
"count": -1
}
},
{
$project: {
_id: 0,
zipcode: "$zipcode",
servicerequesttype: "$servicerequesttype",
count: "$count",
arrayOfTypes: "$array1",
arrayOfIncidents: "$array2"
}
},
{
$group: {
_id: "$zipcode",
arrayOfTypes: {
$push: {type: "$servicerequesttype", count: "$count"}
}
}
},
{
$project: {
_id: "$_id",
array: {
$slice: ["$arrayOfTypes", 3]
}
}
},
{
$sort: {
"_id": -1
}
}
])
推荐阅读
- javascript - onClick 获取第二个元素而不是第一个元素
- ruby-on-rails - 如何检查控制器动作变量是否为空
- javascript - 如何在 Pattern 中排除特定文字
- c# - 在不移动流读取器指针的情况下检查下一行的值
- c++ - Visual Studio 2017 不会创建中间清单文件
- javascript - 图像幻灯片不淡出然后淡入?
- javascript - localStorage 不存储多于一条数据
- python - 从 google-cloud-composer 中的 docker 容器写入文件
- php - Laravel array_forget() 助手,用于嵌套数组
- google-app-engine - Google App Engine - PHP - 邮件不工作