我正在尝试找到一种方法来使用 Firestore 正确设计我的数据模型。我正在寻找类似于 Tinder 的功能,根据您的位置向您显示尚未刷卡的人。
所以我最终得到了类似的东西:
我知道您不能执行“array_not_contains”或“!=”之类的操作,因为您查询的所有字段都需要建立索引。
所以我想知道,是否可以对数据进行建模以使其工作,或者唯一的解决方案是放弃 Firebase,因为这种查询根本不可能?
一种替代方法是将所有用户之间的所有关系(及其状态)存储在集合中。但这也意味着,每当用户注册时,我都必须创建与用户数量一样多的文档,这真的很丑陋,并且制作了大量的文档。
编辑:
再次感谢您的答复,并对我迟到的答复表示歉意。
无需创建新的数据库调用,因为您首先已经获得了该区域的所有用户。
不 如果有一个很大的响应集,我会限制一个数字。(下例中为 5)。即使我不限制数量,在下一个数据库调用中,我如何知道已添加新人员以及如何仅检索这些人员。
如果它们可以向其他用户显示,我不会将它们从用户集合中删除。
PS:我忘记了Users Collection图片中的User4。
对于用户 1,获取 5 个首个匹配项,删除现有匹配项,显示用户 5。
对于 User2,获取 5 个第一个匹配项,删除现有的匹配项,显示 User4、User5。
用户选择后,用户将被添加到他们的列表中。用户集合保持不变。
对于用户 1,获取 5 个第一个匹配项,删除现有匹配项,即使我有用户 6、7,也没有任何内容可显示。
为了解决这个问题,我启动了第二个查询,获取新的匹配项,但是,用户使用应用程序的次数越多,我的查询就越多可能需要尝试向他显示他所在区域的现有用户。
也许我误解了您所说的“初始列表”,对我来说,它是从包含所有用户(有限制)的数据库中检索的列表对象。
编辑2:
你可以查看Alex Mamo的回答了解如何查询数组中不存在的文档。
让我解释一下我的用例以及为什么我认为这行不通。
我希望能够搜索我旁边的所有用户,为了尝试在 Firebase 中执行此操作,我存储了 Geopoint。Geopoint 目前无法真正与 Firebase 一起使用,因此我在云功能中使用 Geofirestore。
我根据用户的位置存储和更新用户的地理点,因此这意味着用户位置随时间变化。我限制了此函数返回的用户数量。
在我的初始状态下,我检索我旁边的用户(用户 1),得到 3 和 4。
假设我存储了最后检查的用户 ID,以便稍后将其用作查询的游标(用户 4)。
现在我的地理位置发生了变化,该区域的用户也发生了变化。我请求我旁边的下一批用户,并使用我之前的 userId/document 来“startAfter”(更多信息请参见此处
),请参见下图,这是行不通的。
如果我使用光标(User4),我将采用 5,但不是 2,因为在返回列表中,如果我按 Id …