如下面的截图所示,我的Collection 中有2个字段和其他名为‘uId’和‘sellerUId’的字段.两者都是身份验证ID.我要筛选uId==auth_idsellerUId==auth_id.

enter image description here

我try 了以下查询:

.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查询.您将需要两个不同的查询-一个用于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;
}

Flutter相关问答推荐

当第二页在单独的小工具中使用Navigator.pop时,Navigator.push不起作用

如何更改默认应用程序启动器/启动屏幕

try 在Flutter应用程序中传递变量到FirebaseFirestore Where子句

在Flutter 中创建自定义Snackbar类

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

请求已在 flutter 中发送到 django 服务器,并且已返回响应,但条件仍然为 false

Supabase Auth:重定向到 Google.com 而不是我的应用程序

尽管我的 url 链接正确,但 ArgumentError(无效参数:URI 文件中未指定主机:///)错误

如何使自动焦点位于已经有一些文本的 TextField 的第一行?

Flutter列顶部和底部出现不必要的边距问题

Flutter ImagePicker - 在 onPressed 中异步获取图像显示 lint 警告

像图像一样Flutter 自定义标签

Flutter:如何在 bottomsheet 中创建一个日期 Select 器,如下图所示

Flutter - 展开图标无法正常工作

如何在 GridView.builder 中设置 textform 字段并在 flutter 中将 12 个 textformfield 作为单个字符串获取?

如何在Flutter中制作带有波浪边框的圆圈来显示图像?

如何获得Flutter 的时差?

Flutter - 异步文件读取异常处理

在 Flutter Bloc 中具有称为 status 的属性的一种状态或不同的状态,哪个更可取?

如何从 Firebase Firestore 中获取具有特定字段值的文档?