查询cosmosDB:获取数组中的最后一个元素

时间:2018-05-31 21:14:39

标签: azure azure-cosmosdb

我有这样的文件:

    { "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

但是我得到了错误,我怎样才能在cosmos DB中查询最后一个元素ZipCodes。

3 个答案:

答案 0 :(得分:0)

使用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);
}

答案 1 :(得分:0)

  

但是我得到了错误,我怎样才能在cosmos DB中查询最后一个元素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

答案 2 :(得分:0)

您可以使用ARRAY_SLICE。当传递-1时,它返回一个包含原始数组最后一个元素的数组。然后使用[0]对其进行索引,以获取其中包含的单个元素(即邮政编码本身)。

SELECT c.id, 
       ARRAY_SLICE(c.ZipCodes,-1)[0] AS LastZipCode
FROM c