繁体   English   中英

Firebase 防火墙查询

[英]Firebase firestore query

我的 collections 中有 2 个字段,其他字段名为“ uId ”和“ sellerUId ”,如下面的屏幕截图所示。 两者都是身份验证 ID。 我想过滤uId == auth_idSellerUId == auth_id

在此处输入图像描述

我尝试了以下查询:

.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);
    }
  });

Firestore 不支持对多个字段进行 OR 查询。 您将需要 2 个不同的查询 - 一个用于uid == auth_id ,另一个用于sellerUid == auth_id

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

{
  users: ["uid", "sellerUid"],
  ...otherFields
}

然后您可以使用array-contains运算符:

.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):

match /collection/{docId} {
  allow read: if request.auth.uid in resource.data.users;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM