如何在位于mongodb中对象下方的嵌套数组中对数组进行排序

时间:2019-10-11 07:21:26

标签: mongodb sorting aggregation-framework

我有如下收集数据。

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

        ]
    }
}

我要获取所有名称为“设备”的数据,并按参数名称为“日期”的“值”的第一个索引进行排序

例如: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 :(得分:0)

以下查询可以为我们提供预期的输出:

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"
            ]
        }
    }
}