根据否定查询Firestore集合

时间:2018-10-16 08:35:28

标签: firebase google-cloud-firestore

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

伪:从不在{list_of_blocked_ids}中author_id的消息中选择*

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

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

2 个答案:

答案 0 :(得分:0)

要解决此问题,请根据有关Query limitations的官方文档:

  

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

  •   

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

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

答案 1 :(得分:-1)

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

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