Firestore v1beta1升级至v1遇阻,ARRAY_CONTAINS_ANY过滤器使用求助
解决Firestore v1beta1不支持ARRAY_CONTAINS_ANY的问题
一、升级Zapier中的Firestore API版本到v1
- 打开你的Zap配置,找到Firestore相关的触发器/动作步骤
- 查看该步骤的设置选项,寻找类似「API版本」的下拉菜单,选择v1(如果有该选项)
- 如果默认集成没有版本选择,改用Zapier的Custom Request动作:
- 选择「Custom Request」作为动作类型
- 设置请求URL为Firestore v1端点,格式如:
https://firestore.googleapis.com/v1/projects/[你的项目ID]/databases/(default)/documents/[你的集合名]:runQuery - 请求方法设为
POST - 在请求体中使用v1版本的查询语法(见下文修正示例)
- 配置身份验证:使用Firebase服务账户密钥,在请求头中添加
Authorization: Bearer [你的访问令牌],或通过Zapier的OAuth连接Firebase(确保连接权限适配v1版本)
二、修正查询代码以支持多值匹配
原查询存在两个问题:一是依赖v1beta1不支持的ARRAY_CONTAINS_ANY,二是ARRAY_CONTAINS_ANY的参数格式错误(需传入数组而非单个字符串)。以下是适配v1版本的修正后查询:
{ "orderBy": [{"field": {"fieldPath":"timestamp"},"direction": "DESCENDING"}], "where": { "compositeFilter": { "op": "AND", "filters": [ { "fieldFilter": { "field": {"fieldPath": "selectedItems"}, "op": "ARRAY_CONTAINS", "value": {"stringValue": "Wind"} } }, { "fieldFilter": { "field": {"fieldPath": "tags"}, "op": "ARRAY_CONTAINS_ANY", "value": { "arrayValue": { "values": [ {"stringValue": "poland"}, {"stringValue": "germany"} // 可添加更多需要匹配的标签 ] } } } } ] } } }
- 注意:
ARRAY_CONTAINS_ANY的value必须是arrayValue类型,包含多个stringValue元素,才能实现「tags数组包含任意一个指定值即匹配」的需求
三、无法升级到v1时的替代方案
如果Zapier的Firestore集成确实无法切换到v1,可通过多个ARRAY_CONTAINS条件组合实现类似效果:
{ "orderBy": [{"field": {"fieldPath":"timestamp"},"direction": "DESCENDING"}], "where": { "compositeFilter": { "op": "AND", "filters": [ { "fieldFilter": { "field": {"fieldPath": "selectedItems"}, "op": "ARRAY_CONTAINS", "value": {"stringValue": "Wind"} } }, { "compositeFilter": { "op": "OR", "filters": [ {"fieldFilter": {"field": {"fieldPath": "tags"},"op": "ARRAY_CONTAINS","value": {"stringValue": "poland"}}}, {"fieldFilter": {"field": {"fieldPath": "tags"},"op": "ARRAY_CONTAINS","value": {"stringValue": "germany"}}} ] } } ] } } }
- 该方式的缺点是标签数量较多时查询会冗长,但能在v1beta1版本下实现「任意匹配」的需求
内容的提问来源于stack exchange,提问作者Ola Michalska
相关产品推荐
相关产品推荐

