我们正在开发一个消息传递系统,用户可以互相阻止。这意味着我们需要能够查询未阻止作者的消息。
伪:从不在{list_of_blocked_ids}中author_id的消息中选择*
由于Firestore不支持array_not_contains或任何其他否定方法,因此我们不确定如何构造此数据以进行此查询。
任何帮助构建有关被阻止用户的信息的帮助。
答案 0 :(得分:0)
要解决此问题,请根据有关Query limitations的官方文档:
Cloud Firestore 不支持以下类型的查询:
带有!= 子句的查询。在这种情况下,您应该将查询分为大于查询和小于查询。例如, 尽管不支持查询子句where(“ age”,“!=”,“ 30”), 您可以通过组合两个查询来获得相同的结果集,其中一个 子句where(“ age”,“ <”,“ 30”)和一个带子句的子句 where(“ age”,“>”,30)。
换句话说,Firestore中没有!=
(不等于)运算符,也没有arrayNotContains()
函数。您唯一的选择是将查询分为greater-than
和less-than
查询,然后它将正常工作。
答案 1 :(得分:-1)
在每个“对话”文档中,放入子集合-一个称为“消息”,另一个称为“阻止列表”。将被阻止的用户uid
分配为true
布尔值的键。使用Firestore规则强制执行阻止,而不是执行查询。
PSEUDO:如果在此对话阻止列表中找不到此uid,则允许读取,写入