【问题标题】:Flutter - How to get documents only that certain value does not contain in a List in Cloud Firestore?Flutter - 如何仅获取 Cloud Firestore 的列表中不包含特定值的文档?
【发布时间】:2021-07-06 03:55:09
【问题描述】:

我有一个 users 集合,每个用户都有一个 id 和一个 id 列表,我需要从 firestore 获取该 id 不在该列表中的文档。

假设我在 Firestore 中有 3 个文档,ID 为 1、2 和 3。

当前用户的列表有 id 1 和 2。

List<String> ids = ["1", "2"];

如何只获取项目“id”不在当前用户列表中的文档?在示例中,它应该只检索 id = 3 的文档。

例如:

FirebaseFirestore.collection("users").where("id", arrayNotContains(ids)).get();

【问题讨论】:

    标签: arrays flutter google-cloud-firestore


    【解决方案1】:

    您正在寻找not-in 操作,它允许您在数组中指定最多10 个值。如果您有超过 10 个 ID,则必须改为从数据库中获取所有文档并在应用程序代码中执行排除。

    如果 id 是文档中的一个字段,则看起来像这样:

    FirebaseFirestore.collection("users").where("id", whereNotIn: ids).get();
    

    如果您实际上是在尝试过滤文档 ID,而不是字段,那就是:

    FirebaseFirestore.collection("users").where(FieldPath.documentId, whereNotIn: ids).get();
    

    【讨论】:

    • 如果我在documentID上过滤,10个项目的限制是一样的或者whereNotIn可以接收任何大小的List?
    • 问题是,如果我有这个限制,并且如果我一次获得所有文件,我将获得很多我在我的应用程序上不需要的文件并最终为它们付费。
    • 10 的限制适用于所有此类过滤器。显式排除 ID 是一项低效的大规模操作,因此 Firestore 不支持它。
    猜你喜欢
    • 2019-08-21
    • 2020-07-10
    • 2021-08-18
    • 2021-10-22
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-03-29
    相关资源
    最近更新 更多