You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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]。

原查询出错原因

你之前的语句返回空对象数组,核心问题有两个:

  1. 类型不匹配:文档中的id是数字类型1234,但查询条件用了字符串'1234',导致没有匹配到目标文档;
  2. 未过滤数组:直接查询properties.address会返回数组中所有元素的address,但因未匹配到文档,所以返回空结果。

内容的提问来源于stack exchange,提问作者gnitsuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:45:08