我想从一个桶中获取所有列名。
我发现了一个查询。
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
采集员.
例如,这个。
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"
}
]
}
]
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%";