Выберите топ 3 в поле после группы MongoDB - PullRequest
0 голосов
/ 27 января 2019

У меня есть коллекция с полями, такими как "servicereqesttype", "zipcode", "date"

Я хочу найти 3 наиболее распространенных "servicerequesttype" для почтового индекса для определенного дня.

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 ...

1 Ответ

0 голосов
/ 27 января 2019
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
    }
}
])
...