Выберите имена столбцов и запрос "LIKE" на Couchbase - PullRequest
1 голос
/ 01 мая 2020

Я хочу получить все имена столбцов из корзины.

Я нашел запрос:

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%'

Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 05 мая 2020

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%";
1 голос
/ 04 мая 2020

Это сложный вопрос, в зависимости от того, какой должна быть результирующая структура. И отказ от ответственности, может быть более краткий способ сделать это (но я еще не нашел это - может быть, есть другой способ, который не включает OBJECT_NAMES?).

Но в любом случае, ключ для меня это был ARRAY оператор сбора .

Например, это:

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

Будет возвращать результаты типа

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

Что вернет:

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