Как вернуть первое, а также второе значение в агрегации $ group - PullRequest
0 голосов
/ 31 марта 2020

У меня есть этот код для получения первого значения из группы:

db.slides.aggregate([
                    {"$match": {"deckid": {"$in": [ObjectId("5d6f9216a4d6980ecb8347a1")]}}},
                    { "$project": { "_id":1, "deckid":1, "slideid" :1, "messagecategories" : {
                        "$objectToArray": { "$mergeObjects":["$messagecategories", "$corrected.messagecategories"]}
                    }}},
                    { "$unwind": "$messagecategories"},
                    { "$sort": { "messagecategories.v": -1}},
                    { "$group":{"_id": "$_id", "messagecategories": { "$first": "$messagecategories" }}},
                    { "$sortByCount": "$messagecategories.k"}
                ])

Пример o / p:

{
    "_id" : "Efficacy",
    "count" : 1
}

"messagecategories": { "$first": "$messagecategories" } это возвращает первое значение. Как получить первое, а также второе значение?

Прошу прощения за любые ошибки, которые я допустил, я новичок в запросах MongoDB.

РЕДАКТИРОВАТЬ

удалено

РЕДАКТИРОВАТЬ 2

Образец Do c:

{
    "_id" : ObjectId("5d75e92fa4d698248a997a51"),
    "deckid" : ObjectId("5d75e8eea4d698248a997a3d"),
    "page" : 2
    "messagecategories" : {
        "Guidelines" : "0.001016",
        "Trial Design" : "0.162572",
        "Safety" : "0.000373",
        "Efficacy" : "0.015276",
        "Cost" : "0.001291",
        "Indication" : "0.000489",
        "Summary" : "0.114031",
        "Other" : "0.0"
    },
    "corrected" : {
        "messagecategories" : {
            "Patient Profile" : 1.0
        },
        "id" : "5d75e92fa4d698248a997a51",
        "type" : "slide"
    }
}

В основном я хочу 2 категории сообщений с наибольшим количеством очков.

Желаемая операция для вышеупомянутого: c:

{
    "_id" : "Patient Profile",
    "count" : 1
}
{
    "_id" : "Trial Design",
    "count" : 1
}

1 Ответ

0 голосов
/ 31 марта 2020

Большое спасибо за помощь @ Джо.

Мне удалось добиться этого следующим образом:

db.slides.aggregate([
                    {"$match": {"deckid": {"$in": [ObjectId("5d6f9216a4d6980ecb8347a1")]}}},
                    { "$project": { "_id":1, "deckid":1, "slideid" :1, "messagecategories" : {
                        "$objectToArray": { "$mergeObjects":["$messagecategories", "$corrected.messagecategories"]}
                    }}},
                    { "$unwind": "$messagecategories"},
                    { "$sort": { "messagecategories.v": -1}},
                    { "$group":{"_id": "$_id", "array1": { "$push": "$messagecategories" }}},
                    { "$project": { "messagecategories": { "$slice": [ "$array1", 2 ] } } }
                ])

Структура o / p была немного изменена, но я могу жить с что.

...