Kotlin 你能帮我做一个;“反加入”;在Firestore的两个系列之间?(基于另一个收集过滤一个收集)
我正在寻找一种方法,根据UID是否存在于另一个集合中来筛选一个Firestore集合。我使用了术语antijoin,但实际上是排除两种语言中都不存在的记录的任何方法。 我的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
.
|- /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个值。因此,您最好:
- 要么读取所有消息,要么排除用户已经在客户端看到的消息
- 或者为每个用户复制消息,然后在他们自己的副本中跟踪他们是否看到了每条消息