在Couchbase上选择列名和查询 "LIKE"。

问题描述 投票:1回答:1

我想从一个桶中获取所有列名。

我发现了一个查询。

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

有什么方法可以做到这一点?

sql couchbase n1ql
1个回答
1
投票

这是个棘手的问题,取决于你想要的结果结构是什么。声明一下,可能有更简洁的方法来做这件事(但我还没有找到--可能还有其他不涉及到 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运算符表达式。例如: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"
      }
    ]
  }
]

2
投票

OBJECT_NAMES() 只给出顶层的字段名(不包括嵌套字段)。https:/docs.couchbase.comservercurrentn1qln1ql-language-referenceobjectfun.html。

SELECT DISTINCT v AS column
FROM mybucket b UNNEST OBJECT_NAMES(b) AS v
WHERE v LIKE "%test%";
© www.soinside.com 2019 - 2024. All rights reserved.