【发布时间】:2021-12-20 17:45:38
【问题描述】:
我正在尝试创建一个 N1QL 查询,该查询将返回客户端列表并嵌入 API 密钥数组。这是我的设置:
桶:
{
"Client-a3c1c7f8r89732": {
"type": "Client",
"id": "a3c1c7f8r89732",
"name": "Cognito Inc"
},
"Client-z6cc6f4r6feer5": {
"type": "Client",
"id": "z6cc6f4r6feer5",
"name": "Some Corp"
},
"ApiKey-3846516546897987": {
"type": "ApiKey",
"key": "3846516546897987",
"client_id": "a3c1c7f8r89732"
},
"ApiKey-98765164865351321": {
"type": "ApiKey",
"key": "98765164865351321",
"client_id": "a3c1c7f8r89732"
},
"ApiKey-646546846546549887": {
"type": "ApiKey",
"key": "646546846546549887",
"client_id": "a3c1c7f8r89732"
}
}
可用索引:
CREATE INDEX `idx-client-query` ON `primary`(`type`,`name`,`id`) WHERE (`type` = "Client")
CREATE INDEX `idx-apikey-query` ON `primary`(`type`,`client_id`,`key`) WHERE (`type` = "ApiKey")
所需的 N1QL 查询输出:
[
{
"id": "a3c1c7f8r89732",
"name": "Cognito Inc",
"api_keys": [
{
"key": "3846516546897987"
},
{
"key": "98765164865351321"
},
{
"key": "646546846546549887"
}
]
},
{
"id": "z6cc6f4r6feer5",
"name": "Some Corp",
"api_keys": []
}
]
到目前为止我已经尝试过
- 使用 ANSI RIGHT OUTER JOIN 检索没有 api 键的客户端(查询结果需要重新处理以嵌套键)。出于某种原因,它只检索具有密钥的客户端。
- 使用 ANSI NEST,如下所示,但我没有得到任何结果
SELECT client.name, client.id, api_key.* as api_keys
FROM `primary` client
INNER NEST `primary` api_key ON client.id = api_key.client_id
WHERE client.type = 'Client' AND api_key.type = 'ApiKey'
任何类似问题的帮助或链接将不胜感激,谢谢:)
【问题讨论】:
-
NEST api_key 变成 ARRAY 之后(所以你不能做 api_key.*)查看 blog.couchbase.com/ansi-join-support-n1ql 的示例 17