Сортировка документа MongoDB - PullRequest
1 голос
/ 16 марта 2020

Моя коллекция MongoDB содержит следующие документы:

{
    "key1": "Some value 1",
    "key2": "Some value2",
    "application_detail" : {
        "reason_collection" : [
            [
                0,
                "value1"
            ],
            [
                0,
                "value2"
            ],
            [
                1,
                "value3"
            ],
            [
                0,
                "value4"
            ],          
            [
                3,
                "value5"
            ]
        ]
    }
}

Как получить следующий вывод?

{
    "reason_collection": [value5, value3]

}

Вывод должен соответствовать следующим условиям:

  1. Сортировка application_detail.reason_collection в порядке убывания на основе первого значения (целочисленного значения) каждого подмассива.

    Здесь коллекция причин сортируется следующим образом:

"reason_collection" : [
         [
             3,
             "value5"
         ],
         [
             1,
             "value3"
         ],
         [
             0,
             "value1"
         ],
         [
             0,
             "value2"
         ],          
         [
             0,
             "value4"
         ]
     ]
Также игнорируйте подмассивы, имеющие в качестве первого значения индекса 0. Выведите значения, т.е. только второй индекс каждого подмассива.

1 Ответ

1 голос
/ 16 марта 2020

Попробуйте это:

db.collection.aggregate([
  {
    $addFields: {
      "application_detail.reason_collection": {
        $filter: {
          input: "$application_detail.reason_collection",
          cond: {
            $gt: [
              {
                $arrayElemAt: [
                  "$$this",
                  0
                ]
              },
              0
            ]
          }
        }
      }
    }
  },
  {
    $unwind: "$application_detail.reason_collection"
  },
  {
    $sort: {
      "application_detail.reason_collection.0": -1
    }
  },
  {
    $group: {
      _id: "$_id",
      reason_collection: {
        $push: {
          $arrayElemAt: [
            "$application_detail.reason_collection",
            1
          ]
        }
      }
    }
  }
])

MongoPlayground

...