我有这样的文件:
{ "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。
答案 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];
}
SQL查询:
SELECT c.id,c.Title,udf.GetLastRecord(c.ZipCodes) as ZipCodes FROM c
测试结果:
答案 2 :(得分:0)
您可以使用ARRAY_SLICE
。当传递-1
时,它返回一个包含原始数组最后一个元素的数组。然后使用[0]
对其进行索引,以获取其中包含的单个元素(即邮政编码本身)。
SELECT c.id,
ARRAY_SLICE(c.ZipCodes,-1)[0] AS LastZipCode
FROM c