首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[消]防火墙防火墙查询

[消]防火墙防火墙查询
EN

Stack Overflow用户
提问于 2022-09-19 17:06:49
回答 1查看 31关注 0票数 2

我的集合中有两个字段,名为“uId”和“sellerUId”,如下面的截图所示。都是八月号。我要过滤uId == auth_idsellerUId == auth_id

我尝试了以下查询:

代码语言:javascript
复制
.doc('doc name')
  .collection('collection name')
  .where(['uId', 'sellerUId'], isEqualTo: 'auth_id')
  .get()
  .then((QuerySnapshot querySnapshot) {
    for (var doc in querySnapshot.docs) {
      print(doc.id);
    }
  });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 17:17:23

Firestore不支持多个字段的OR查询。您需要两种不同的查询--一个用于uid == auth_id,另一个用于sellerUid == auth_id

对于这个用例,您可以在文档users中存储一个数组,该数组包含这样的userIdsellectUid,因此您可以在一个查询中获取这些文档:

代码语言:javascript
复制
{
  users: ["uid", "sellerUid"],
  ...otherFields
}

然后可以使用array-contains操作符:

代码语言:javascript
复制
.doc('doc name')
  .collection('collection name')
  .where("users", arrayContains: "auth_id");
  .get()
  .then((QuerySnapshot querySnapshot) {
    for (var doc in querySnapshot.docs) {
      print(doc.id);
    }
  });

这将获取users数组包含auth_id的所有文档。您可以使用以下安全规则(假设auth_id是当前用户的UID )来保护这个安全:

代码语言:javascript
复制
match /collection/{docId} {
  allow read: if request.auth.uid in resource.data.users;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73776952

复制
相关文章

相似问题

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