我希望使用Flutter + Firestore构建一个简单的聊天应用程序,将用户和聊天记录存储在单独的集合中。每个聊天文档都有两个字符串字段[uid1,uid2],它们表示各个参与者的用户ID。我需要能够搜索给定用户(uid)的所有聊天记录,以便进行某种类型的OR查询,这可以通过将它们存储在array字段中并使用array_contains来实现。
但是,要更新聊天文档,我需要能够直接在两个字段上进行查询以检索两个用户之间的特定聊天,而使用数组方法是不可能的(不允许使用嵌套array_contains)。即使将它们都存储为两个顶级字符串字段,也需要针对两个方向的两个Firestore查询。
是否有任何有关如何解决Firestore查询限制的建议?
答案 0 :(得分:0)
您可以通过将两个用户ID合并为一个字符串来创建包含查询所需所有数据的复合字段。务必先对ID进行排序,以确保ID的顺序可预测。
因此,如果您有用户“ A”和用户“ B”,则您的复合字段值将只是“ AB”(而不是“ BA”),并且可以对此字段进行过滤以查找这两个字段之间的所有消息用户。