从couchbase查询中提取数组元素

时间:2017-11-14 18:39:00

标签: couchbase n1ql

我需要制作一个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";

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

1 个答案:

答案 0 :(得分:0)

尝试以下步骤:

  1. 使用UNNEST
  2. 提取嵌套的动物信息
  3. 使用MAX
  4. 查找年龄最大的动物
  5. 再次通过动物并使用子查询找到具有最大年龄的动物
  6. 使用此查询实现步骤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"
        }
      }
    ]