MongoDB - Mengelompokkan berdasarkan dokumen dalam dan mengambil hasil teratas

Saya mencoba menemukan keterampilan paling umum (dan paling tidak umum) yang disimpan di database mongo. Saya menggunakan luwak untuk mengambil hasilnya.

User adalah dokumen root, yang masing-masing memiliki dokumen Profile di dalamnya. Profil tersebut memiliki atribut 'skill' yang berisi array ProfileSkillEntry yang memiliki title (nama skill).

return User.aggregate([{
        $group: {
            '_id': '$profile.skills.title',
            'count': {
                $sum: 1
            }
        }
    }, {
        $sort: {
            'count': -1
        }
    }, {
        $limit: 5
    }]);

Saya mengharapkannya untuk menggabungkan semua keterampilan Pengguna yang terdaftar bersama-sama, menemukan 5 keterampilan teratas yang muncul dan mengembalikannya. Sebaliknya tampaknya mengelompokkan per pengguna dan memberikan hasil yang tidak valid.

Contoh User struktur dokumen:

{
    "_id" : ObjectId("..."),
    "firstName" : "Harry",
    "lastName" : "Potter",
    "profile" : {
        "_id" : ObjectId("..."),
        "skills" : [
            {
                "_id" : ObjectId("..."),
                "title" : "Java",
                "description" : "Master",
                "dateFrom" : "31/07/2019",
                "coreSkill" : true
            },
            {
                "_id" : ObjectId("..."),
                "title" : "JavaScript",
                "description" : "Proficient",
                "dateFrom" : "31/07/2019",
                "coreSkill" : false
            }
        ],
    }
}

person A5H73Y    schedule 08.09.2019    source sumber
comment
Silakan kirimkan contoh dokumen Anda   -  person Dexter    schedule 09.09.2019
comment
@Anban Termasuk contoh dokumen Pengguna.   -  person A5H73Y    schedule 09.09.2019


Jawaban (1)


Silakan gunakan kueri di bawah ini. Cukup tambahkan pengurutan dan batas sesuai kebutuhan Anda

db.test.aggregate(
[{ $unwind: {  path: "$profile.skills"} }, 
{ $group: {  _id: "$profile.skills.title",  
    "count": {    $sum: 1  }} }] )
person Dexter    schedule 10.09.2019
comment
Fantastis! Terima kasih. - person A5H73Y; 10.09.2019