Couchbase N1QL如何通过索引嵌套关联文档查询客户端及对应API密钥
可行N1QL查询方案
SELECT client.id, client.name, ARRAY {"key": ak.key} FOR ak IN api_keys END AS api_keys FROM `primary` client LEFT NEST `primary` api_keys ON client.id = api_keys.client_id AND api_keys.type = "ApiKey" WHERE client.type = "Client"
原尝试方案错误原因
- 使用了
INNER NEST内连接嵌套:仅会返回存在关联API密钥的客户端,自动过滤无密钥的客户端(如示例中的Some Corp) - API密钥类型过滤位置错误:将
api_key.type = 'ApiKey'放在WHERE子句中时,无关联密钥的客户端对应的API密钥字段为MISSING,会被WHERE条件过滤,等效于内连接逻辑 - 结果字段处理逻辑错误:
NEST返回的API密钥本身为数组结构,需要遍历数组提取每个元素的key字段,不能直接用.*拆分
上述查询可以完全复用你已创建的两个索引,无需额外新建索引,返回结果和你期望的结构完全一致。
内容的提问来源于stack exchange,提问作者Pierre Roudaut
相关产品推荐
相关产品推荐

