Select 列名称并在 Couchbase 上查询 "LIKE"

Select column names and querying "LIKE" on Couchbase

我想从存储桶中获取所有列名。

我找到了一个查询:

SELECT ARRAY_DISTINCT(ARRAY_AGG(v)) AS column
FROM mybucket b UNNEST object_names(b) AS v

它正在获取列名数组,但我需要 LIKE SQL 命令。是这样的:

SELECT column
FROM mybucket
WHERE column LIKE '%test%'

有办法吗?

这是一个棘手的问题,具体取决于您希望生成的结构是什么。免责声明,可能有更简洁的方法来做到这一点(但我还没有找到它——也许还有另一种方法不涉及OBJECT_NAMES?)。

但无论如何,对我来说关键是 ARRAY collection operator

例如,这个:

SELECT ARRAY a FOR a IN ARRAY_DISTINCT(ARRAY_AGG(allFieldNames))
       WHEN a LIKE '%test%' END AS filteredFieldNames
FROM mybucket b UNNEST object_names(b) AS allFieldNames

会 return 结果像

[
  {
    "filteredFieldNames": [
      "testField1",
      "anotherTestField"
    ]
  }
]

如果您想要不同的格式,可以使用 ARRAY 运算符表达式。例如:

SELECT ARRAY { "fieldName" : a } FOR a IN 
       ARRAY_DISTINCT(ARRAY_AGG(allFieldNames))
       WHEN a LIKE '%test%' END AS filteredFieldNames
FROM mybucket b UNNEST object_names(b) AS allFieldNames

哪个 return:

[
  {
    "filteredFieldNames": [
      {
        "fieldName": "testField1"
      },
      {
        "fieldName": "anotherTestField"
      }
    ]
  }
]

OBJECT_NAMES() 仅给出顶级字段名称(不包括嵌套字段) https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/objectfun.html

SELECT DISTINCT v AS column
FROM mybucket b UNNEST OBJECT_NAMES(b) AS v
WHERE v LIKE "%test%";