首页 > 解决方案 > 在 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 ...

标签: mongodbmongodb-queryaggregation-framework

解决方案


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
    }
}
])

推荐阅读