Запрос cosmosDB: получить последний элемент в массиве - PullRequest
0 голосов
/ 01 июня 2018

У меня есть такой документ:

    { "id": ....,
    "Title": ""title,
    "ZipCodes": [
            {
                "Code": "code01",
                "Name": "Name01"
            },
            {
                "Code": "code02",
                "Name": "Name02"
            },
            {
                "Code": "code03",
                "Name": "Name03"
            } ],
"_rid": .......,
"_self": .......,
"_etag": ......,
"_attachments": "attachments/",
"_ts": ......

Я был использован для команды

select c.id, c.ZipCodes[ARRAY_LENGTH (c.ZipCodes) -1] as ZipCodes from c

Но я получил ошибку, как я могу запросить последний элемент ZipCodes в базе данных космоса.

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Но я получил ошибку, как я могу запросить последний элемент ZipCodes в базе данных космоса.

Я согласен с Sajeetharan упомянул, что мы могли бы использовать UDF, чтобы сделать это.И мы могли бы легко сделать это с помощью UDF.

Код UDF

function userDefinedFunction(zipcodes){

    return zipcodes[zipcodes.length-1];
}

enter image description here

Запрос SQL:

SELECT c.id,c.Title,udf.GetLastRecord(c.ZipCodes) as ZipCodes FROM c

Результат теста:

enter image description here

0 голосов
/ 06 октября 2018

Для этого вы можете использовать ARRAY_SLICE.Когда передано -1, оно возвращает массив, содержащий последний элемент исходного массива.Затем внесите в индекс [0], чтобы получить содержащийся единственный элемент (т.е. сам почтовый индекс).

SELECT c.id, 
       ARRAY_SLICE(c.ZipCodes,-1)[0] AS LastZipCode
FROM c
0 голосов
/ 01 июня 2018

Нет никакого способа, используя select, вы можете запросить вложенный документ, я думаю, вы должны использовать условие where следующим образом,

SELECT value udf.sortZipCode(c.ZipCodes)
from c where c.id=2 and c.Title='title'

Однако, здесь есть пользовательская функция (UDF), которая будет выполнятьтрюк:

function sortZipCode(ZipCode) { 
  function compareTimeStamps(a, b) {
    return a.TimeStamp - b.TimeStamp; //implement your logic
  }
  return scanLog.sort(compareTimeStamps);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...