Как отобразить позицию в массиве с помощью Cosmos DB SQL - PullRequest
1 голос
/ 13 июня 2019

У меня проблема при попытке выбора из массива документов в Cosmos-db.(SQL-api)

Я могу выбрать значения из массива, однако мне бы хотелось иметь возможность отображать каждую позицию значений в массиве также.

Пример документа JSON:

{
    "Type": "SampleJSONMessage",
"Version": "1",
"Reference": "Test",
"DateTime": "2019-03-29T15:16:11.503Z",
"Configuration": {
    "MessageType": "1",
    "MessageConfig": "100",
    "Source": [
        {
            "Source": "Stream1"
        },
        {
            "Source": "Stream2"
        },
        {
            "Source": "Stream3"
        },
        {
            "Source": "Stream4"
        }
    ]
}
}

Я выполняю это:

выберите c.Configuration.Source из c

, который возвращает это:

[
{
    "Source": "Stream1" 
},
{
    "Source": "Stream2"
},
{
    "Source": "Stream3"
},
{
    "Source": "Stream4"
}
]

Это то, что яхотел бы отобразить:

[
{
    "Source": "Stream1" ,
    "Position": "1"
},
{
    "Source": "Stream2",
    "Position": "2"
},
{
    "Source": "Stream3",
    "Position": "3"
},
{
    "Source": "Stream4",
    "Position": "4"
}
]

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 18 июня 2019

Хотя специальный индекс хранится внутри CosmosDB для каждого элемента массива, в настоящее время в API SQL нет метода прямого доступа к нему.Однако определенная пользователем функция будет работать.

Вот UDF, который я добавил в свою коллекцию:

function ADD_INDEX(array){
    array.forEach(function(item, index){item.Position = index.toString()});
    return array;
}

И модифицированный запрос, чтобы использовать его для получения желаемого результата:

select udf.ADD_INDEX(c.Configuration.Source) AS Source from c
...