【问题标题】:Extract array element from couchbase query从 couchbase 查询中提取数组元素
【发布时间】:2018-04-27 19:54:00
【问题描述】:

我需要做一个 N1QL 查询来提取年龄最大的动物,来自这里的示例:

[
  {
    "animals": [
      {
        "name": "dog1",
        "registered": "7-16-2017",
        "age_in_months": "24",
      },
      {
        "name": "dog2",
        "registered": "7-18-2017",
        "age_in_months": "28",
      }
    ]
  }
]

我需要这个结果:

[
  {
    "oldest": 
      {
        "name": "dog2",
        "registered": "7-18-2017",
        "age_in_months": "28",
      }
  }
]

我正在使用这个查询

select t1.animals from `bucket` t1 use keys "myKey";

但我不知道如何从数组中提取部分

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:

    试试这些步骤:

    1. 使用UNNEST提取嵌套动物信息,
    2. 使用MAX查找年龄最大的动物,然后
    3. 再次遍历动物并使用子查询找到年龄最大的动物

    第 1 步和第 2 步通过此查询实现

    SELECT RAW MAX(animals.age_in_months) 
        FROM `bucket` USE KEYS "myKey" UNNEST animals
    

    第 3 步再次使用UNNEST,但这次我们使用上一个查询的输出来选择年龄最大的动物。这种方法将挑选所有年龄最大的动物。

    这是完整的查询:

    SELECT animal 
      FROM `bucket` b USE KEYS "myKey" UNNEST animals animal 
        WHERE animal.age_in_months IN 
          (SELECT RAW MAX(animals.age_in_months) 
            FROM `bucket` USE KEYS "myKey" UNNEST animals);
    

    这是您的示例的结果:

    [
      {
        "animal": {
          "age_in_months": "28",
          "name": "dog2",
          "registered": "7-18-2017"
        }
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      相关资源
      最近更新 更多