如何在Couchbase中编写SELECT查询获取符合数组字段条件的地址列表?
正确的Couchbase查询语句
要提取id为1234的文档中,properties数组里color为'red'的所有address,可通过以下两种方式实现:
方法一:使用ARRAY构造函数直接过滤
SELECT RAW ARRAY p.address FOR p IN properties WHEN p.color = 'red' END FROM myBucket WHERE id = 1234;
此语句会遍历properties数组,仅保留color等于'red'的元素的address字段,直接返回结果[12,9]。如果需要带键名的结果,可去掉RAW关键字:
SELECT ARRAY p.address FOR p IN properties WHEN p.color = 'red' END AS addresses FROM myBucket WHERE id = 1234;
返回结果为{"addresses": [12,9]}。
方法二:通过UNNEST展开数组后聚合
SELECT RAW ARRAY_AGG(p.address) FROM myBucket UNNEST properties AS p WHERE id = 1234 AND p.color = 'red';
UNNEST会将数组展开为单个文档,之后过滤出color为'red'的元素,再用ARRAY_AGG将address聚合为数组,最终返回[12,9]。
原查询出错原因
你之前的语句返回空对象数组,核心问题有两个:
- 类型不匹配:文档中的
id是数字类型1234,但查询条件用了字符串'1234',导致没有匹配到目标文档; - 未过滤数组:直接查询
properties.address会返回数组中所有元素的address,但因未匹配到文档,所以返回空结果。
内容的提问来源于stack exchange,提问作者gnitsuk
相关产品推荐
相关产品推荐

