Kotlin 你能帮我做一个;“反加入”;在Firestore的两个系列之间?(基于另一个收集过滤一个收集)

Kotlin 你能帮我做一个;“反加入”;在Firestore的两个系列之间?(基于另一个收集过滤一个收集),kotlin,google-cloud-firestore,nosql,Kotlin,Google Cloud Firestore,Nosql,我正在寻找一种方法,根据UID是否存在于另一个集合中来筛选一个Firestore集合。我使用了术语antijoin,但实际上是排除两种语言中都不存在的记录的任何方法。 我的firestore的结构如下: . |- /Users |- /User_A |- Message UID 001 |- Message UID 002 |- ... |- /User_B |- ... |- /Messages |- Messa

我正在寻找一种方法,根据UID是否存在于另一个集合中来筛选一个Firestore集合。我使用了术语antijoin,但实际上是排除两种语言中都不存在的记录的任何方法。 我的firestore的结构如下:

. 
|- /Users
    |- /User_A
        |- Message UID 001
        |- Message UID 002
        |- ...
    |- /User_B
    |- ...
|- /Messages
    |- Message UID 001
    |- Message UID 002
    |- ...

我想知道一种过滤“/消息”查询的方法,以排除/User_X下的查询(取决于登录的用户)。目前,我的方法是从/Users/User_X和/Messages中查询,并在代码中进行过滤,但我希望有一种方法可以避免传输大部分不必要的数据,尤其是当数据成为一个大型集合时。

Firestore读取和查询始终在单个集合或集合组上运行(名称完全相同的集合)。它们不能跨多个集合工作(或返回文档)

因此,如果要根据另一个集合中的值筛选一个集合中的文档,则需要将该值复制到前一个集合中的每个文档中

在您的用例中,您可以执行
不在
查询,但必须先从
用户a
中读取所有文档并提取ID。即使如此,
不在
条件也只能包含10个值。因此,您最好:

  • 要么读取所有消息,要么排除用户已经在客户端看到的消息
  • 或者为每个用户复制消息,然后在他们自己的副本中跟踪他们是否看到了每条消息

Thank you@frank。我也在考虑使用子集合来跟踪用户是否看到了该消息。很高兴知道我没有完全遗漏什么,所以谢谢。