Как создать псевдоним элементов массива в документах CosmosDB? - PullRequest
1 голос
/ 06 января 2020

У меня есть следующий документ,

{
        "VehicleDetailId": 1,
        "VehicleDetail": [
            {
                "Id": 1,
                "Make": "BMW"
            },
            {
                "Id": 1,
                "Model": "ABDS"
            },
            {
                "Id": 1,
                "Trim": "5.6L/ASMD"
            },
            {
                "Id": 1,
                "Year": 2008
            }
        ]
}

Я хочу дать псевдонимы для элементов массива, что-то вроде этого,

{
        "VehicleDetailId": 1,
        "Type": "VehicleDetail",
        "VehicleDetail": [
            {
                "MakeId": 1,
                "MakeValue": "BMW"
            },
            {
                "ModelId": 1,
                "ModelValue": "ABDS"
            },
            {
                "TrimId": 1,
                "TrimValue": "5.6L/ASMD"
            },
            {
                "YearId": 1,
                "YearValue": 2008
            }
        ]
}

Следующий запрос, кажется, работает нормально, но Поскольку Id является общим для всех, он повторяется каждый раз.

SELECT c.vehicleDetailId, ARRAY(SELECT v.Id AS MakeId, v.Make AS MakeValue,
                                       v.Id AS ModelId, v.Model AS ModelValue,
                                       v.Id AS TrimId, v.Trim AS TrimValue,
                                       v.Id AS YearId, v.Year AS YearValue
                                FROM v IN c.VehicleDetail) AS VehicleDetail 
FROM c

Как мне написать запрос, чтобы Id не повторялся каждый раз, и я мог получить элемент из указанного c положение

1 Ответ

1 голос
/ 06 января 2020

Вы можете использовать UDF для реализации своих потребностей.

Код Udf:

function userDefinedFunction(array){
    var returnArray = [];
    for(var i=0;i<array.length;i++){
        var obj = array[i];
        var map = {};
        if(obj.Make){
            map["MakeId"]= obj.Id;
            map["MakeValue"]= obj.Make;
        }else if(obj.Model){
            map["ModelId"]= obj.Id;
            map["ModelValue"]= obj.Model;
        }else if(obj.Trim){
            map["TrimId"]= obj.Id;
            map["TrimValue"]= obj.Trim;
        }else if(obj.Year){
            map["YearId"]= obj.Id;
            map["YearValue"]= obj.Year;
        } 
        returnArray.push(map);
    }
    return returnArray;
}

Sql:

SELECT c.VehicleDetailId,udf.test(c.VehicleDetail) AS VehicleDetail 
FROM c

Вывод:

enter image description here

...