【问题标题】:Query cosmosDB: get last element in array查询 cosmosDB:获取数组中的最后一个元素
【发布时间】:2018-05-31 21:14:39
【问题描述】:

我有这样的文件:

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

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

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

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

    【讨论】:

    • 知道如果该数组中的名称是日期,我们如何在不使用 UDF 的情况下获取最新记录。
    • @jubi - 您应该提出一个新问题以及示例文档和所需结果
    • 问题达到最大限制
    【解决方案2】:

    没有办法使用 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);
    }
    

    【讨论】:

      【解决方案3】:

      但我遇到了错误,我如何查询 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
      

      测试结果:

      【讨论】:

      • 感谢您的支持。你知道如何计算“ZipCode”上不同的“Code”吗?
      • 嗨,Tom,您能帮我在 cosmos DB 中按值计数吗?
      猜你喜欢
      • 2022-08-03
      • 2015-04-25
      • 2022-09-29
      • 1970-01-01
      • 2011-09-09
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多