【问题标题】:Query Firestore collection based on negation基于否定查询 Firestore 集合
【发布时间】:2018-10-16 08:35:27
【问题描述】:

我们正在开发一个用户可以互相屏蔽的消息传递系统。这意味着我们需要能够查询作者未被阻止的消息。

伪:从 author_id 不在 {list_of_blocked_ids} 中的邮件中选择 *

由于 Firestore 不支持 array_not_contains 或任何其他否定方法,我们非常不确定如何构造这些数据以进行此查询。

感谢任何帮助构建有关被阻止用户的信息的帮助。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    为了解决这个问题,根据Query limitations的官方文档:

    Cloud Firestore 不支持以下类型的查询:

    • 带有 != 子句的查询。在这种情况下,您应该将查询拆分为大于查询和小于查询。例如, 虽然不支持查询子句 where("age", "!=", "30"), 您可以通过组合两个查询来获得相同的结果集,一个与 子句 where("age", "”,30)。

    换句话说,Firestore 中没有 !=(不等于)运算符,也没有 arrayNotContains() 函数。您唯一的选择是将查询拆分为 greater-thanless-than 查询,然后它就可以正常工作了。

    【讨论】:

    • 感谢您的回答。您能否详细说明如何进行此查询?我们有一个被阻止的作者 ID 列表,并希望显示作者 ID 不是这些被阻止的作者 ID 中的任何一个的所有对话。提前谢谢你。
    • 您应该根据答案中的信息自行尝试,如果出现其他问题,请提出另一个问题。
    【解决方案2】:

    在每个“对话”文档中,放置子集合 - 一个称为“消息”,一个称为“阻止列表”。将被阻止的用户uid 分配为true 的布尔值的键。使用 Firestore 规则来强制阻止,而不是查询。

    伪:如果在此对话阻止列表中找不到此 uid,则允许读取、写入

    【讨论】:

    • 感谢您的回答 - 不幸的是,这不起作用。我们需要能够查询帖子作者未被阻止的所有对话。我们不能这样做,正如 Firestore 文档所述:“在编写查询以检索文档时,请记住安全规则不是过滤器——查询是全部或全部。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多