Firestore array-contains-any数组查询失效,数据库UI查询正常
解决Firestore
array-contains-any 查询不生效的问题 嘿,我碰到过好几次这种情况——代码里的查询没返回预期结果,但控制台UI却能正常查到,大概率是几个常见问题导致的,我给你捋捋:
1. 数据类型不匹配(最容易踩的坑)
Firestore对类型匹配卡得特别严!比如你数据库里parentCase数组存的是字符串 "66",但代码里传的是数字 66,这俩完全不匹配,自然查不到结果。你先去Firebase控制台打开几个目标文档,看看parentCase里的元素到底是数字还是字符串。
要是真的是类型问题,改下代码里的参数就行:
// 如果数据库里是字符串,就传["66"] const docBookingRef = firestore().collection("booking").where("parentCase", "array-contains-any", ["66"])
2. 检查是不是连错了Firestore项目
有时候代码里初始化的Firestore可能指向了测试环境或者其他项目,和你控制台看的不是同一个库。你可以在代码里加一行打印,确认下当前连接的项目ID:
console.log("当前Firestore项目ID:", firestore()._delegate._projectId);
对比下控制台的项目ID,要是不一样,就得调整代码里的初始化配置了。
3. 权限规则是不是限制了查询
虽说控制台能查到,但控制台默认是用管理员权限访问的,而代码里可能是普通用户身份。你可以临时把权限规则改成开放(测试完一定要改回去!):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
改完之后如果查询正常了,那就是权限规则的问题,得调整规则让当前用户能访问booking集合。
4. 确认查询逻辑和控制台完全一致
你在控制台用的是array-contains还是array-contains-any?不过对于单个元素来说,这俩效果是一样的,但还是确认下控制台的查询条件和代码里完全一致,比如有没有漏了其他过滤条件。
另外,你可以打印下查询引用,看看生成的查询是否符合预期:
console.log("查询详情:", docBookingRef._query);
内容的提问来源于stack exchange,提问作者Sunny Shah
相关产品推荐
相关产品推荐

