как отсортировать массив во вложенном массиве, который находится под объектом в mongodb - PullRequest
0 голосов
/ 11 октября 2019

У меня есть сбор данных, как показано ниже.

{
    "name": "Devices",
    "exten": {
        "parameters": [{
                "name": "Date",
                "value": ["5","2"]
            }, {
                "name": "Time",
                "value": ["2"]
            }, {
                "name": "Season",
                "value": ["6"]
            }

        ]
    }
}

Я хочу взять все данные с именем «Устройства» и отсортировать по первому индексу «Значение», то есть имени параметра - «Дата»

ex: mongo получит

name = "devices"
exten.parameters.name = "Date"

отсортирует его по

exten.parameters.value[0]

, в этом примере оно будет отсортировано по "5".

запрос ниже возвращает 0 записей.

db.brand.aggregate(
    { $match: {
        "name" : "Devices"
    }},
     { $unwind: "$exten.parameters" },
    { $match: {
        'exten.parameters.name': 'Date'
    }},
    { $sort: {
        'exten.parameters.value': -1
    }}
)

1 Ответ

0 голосов
/ 11 октября 2019

Следующий запрос может дать нам ожидаемый результат:

db.collection.aggregate([
    {
        $match:{
            "name":"Devices"
        }
    },
    {
        $unwind:"$exten.parameters"
    },
    {
        $match:{
            "exten.parameters.name":"Date"
        }
    },
    {
        $project:{
            "name":1,
            "exten":1,
            "firstParam":{
                $arrayElemAt:["$exten.parameters.value",0]
            }
        }
    },
    {
        $sort:{
            "firstParam":1
        }
    },
    {
        $project:{
            "firstParam":0
        }
    }
]).pretty()

Набор данных:

{
    "_id" : ObjectId("5da02fb86472ba670fd8c159"),
    "name" : "Devices",
    "exten" : {
        "parameters" : [
            {
                "name" : "Date",
                "value" : [
                    "5",
                    "2"
                ]
            },
            {
                "name" : "Date",
                "value" : [
                    "2",
                    "7"
                ]
            },
            {
                "name" : "Time",
                "value" : [
                    "2"
                ]
            },
            {
                "name" : "Season",
                "value" : [
                    "6"
                ]
            }
        ]
    }
}

Выход:

{
    "_id" : ObjectId("5da02fb86472ba670fd8c159"),
    "name" : "Devices",
    "exten" : {
        "parameters" : {
            "name" : "Date",
            "value" : [
                "2",
                "7"
            ]
        }
    }
}
{
    "_id" : ObjectId("5da02fb86472ba670fd8c159"),
    "name" : "Devices",
    "exten" : {
        "parameters" : {
            "name" : "Date",
            "value" : [
                "5",
                "2"
            ]
        }
    }
}
...