首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用where(in:)和where(isEqual:)

使用where(in:)和where(isEqual:)
EN

Stack Overflow用户
提问于 2020-07-21 16:43:58
回答 1查看 1.1K关注 0票数 0

下面的复合where(in:)where(isEqualTo:)查询可以在Firestore中进行吗?

(Swift)

代码语言:javascript
复制
let taskDocIds = ["0ArJnMgTfDkvolUcZR8E", "0cdcZsfaEJQpsiByJIgH"]

return db.collection("tasks")
      .whereField("status", isEqualTo: "approved")
      .whereField(Firebase.FieldPath.documentID(), in: taskDocIds)
      .limit(to: 100)
      .getDocuments(as: TaskModel.self)

我的安全规则强制规定,只有使用status作为approved的任务才能被读取。但是,当id位于status数组中的任务的status有一个status而不是approved时,上面的查询将导致一个错误(参见下面)。

错误: Domain=FIRFirestoreErrorDomain Code=7“缺少权限或权限不足”。

如果查询是可能的,那么是否需要创建一个复合索引?如果是这样的话,如何手动(使用Firebase控制台)配置FieldPath文档id?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 16:52:54

权限错误永远不能通过添加索引来解决。

问题是,如果不单独检查整个taskDocIds集,规则就不知道是否允许它们。因此,在执行查询时,规则防火墙安全规则不是过滤器。 不会单独读取和检查每个文档(),而只提供匹配的文档。如果不能保证每个可以匹配查询的文档都与查询完全匹配,那么它就会导致整个规则失败。

你的选择是简单的getDocument()每一个单独的。对于单个文档gets,规则检查文档的各个字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63019155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档