【问题标题】:N1QL - query multilevel nested JSON data in CouchBaseN1QL - 在 CouchBase 中查询多级嵌套 JSON 数据
【发布时间】:2018-12-05 11:27:20
【问题描述】:

如何通过查询多级嵌套值来选择整个 JSON 文档?这是我的 JSON 示例:

{
  "id": "6316194187233559482",
  "type": "Hotel",
  "attributes": [
    {
      "country": "Germany",
      "officialNames": [
          {
            "name": "The Ritz-Carlton, Berlin",
            "language": "GER"
          }
      ],
      "streetsAndCities": [
          {
              "city": "Berlin",
              "cityLanguage": "GER",
              "street": "Potsdamer Platz ",
              "streetLanguage": "GER"
          }
      ]   
    }
  ]
}

我想查询它的“名称”属性。我已经尝试过 UNNEST 函数,并且访问第一级嵌套数据(即“officialNames”)没有问题。但我不知道如何访问“名称”属性。按位置引用它,例如:

SELECT * FROM document 
UNNEST attributes as attributes
WHERE attributes[0].officialNames[0].name = "The Ritz-Carlton, Berlin"

由于 JSON 中每个属性的位置可能发生变化,因此无法正常工作。

【问题讨论】:

标签: json couchbase n1ql


【解决方案1】:

“JSON 中每个属性的位置都可以改变”是什么意思?您的意思是“attributes”、“officialNames”和“streetsAndCities”数组可以有额外的条目,并且您想搜索所有条目吗?

如果是,请查看此处的 ANY 运算符: https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/collectionops.html

【讨论】:

  • “JSON 中每个属性的位置可以改变”我的意思是“官方名称”具有对象数组,其中“名称”并不总是在位置 [0]。我的 JSON 数据可能非常复杂/嵌套,因此我认为按位置引用不会起作用。
  • 好的,我认为您应该重新考虑您的数据模型。数组(带 [])仅用于重复元素,映射(带 {})用于元素集合。您可以控制数组中的顺序;您无法控制地图中的顺序。本文介绍 JSON 建模:blog.couchbase.com/json-data-modeling-rdbms-users
  • 无论如何,如果您想引用“柏林丽思卡尔顿酒店”的值,您可以使用attributes[0].officialNames[0].name
  • 关于重新考虑数据模型。我没有选择改变它。我只是数据的最终用户,这意味着我只能查询它。
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多