swift 查询Firebase Firestore数据

9o685dep  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(124)

我希望建立一个应用程序,功能像一个约会应用程序:
1.用户A获取所有用户。
1.用户A删除用户B、C和D。
1.用户A再次获取所有用户-不包括用户B、C和D。
我的目标是执行一个查询,该查询不读取我的fetch查询中的User B、C和D文档。
我已经阅读了array-contains-anyarray-containsnot-in查询,但是10个条目的限制阻止了我将这些作为选项使用,因为“删除的用户列表”将继续增长。
我仔细考虑过的两个解决方案是...
1.对所有用户文档执行分页提取,然后在客户端过滤掉?
1.将1个文档上的所有用户ID(A、B、C、D)存储在数组字段中,获取1个文档,然后过滤客户端?

  • 任何 * 指导都将非常感谢关于我如何存储我的数据或我可以执行的特定查询的建议。
cngwdvgl

cngwdvgl1#

你可以反过来做。
在当前用户处不是removedignored数组,而是一个ignoredByremovedBy数组,您可以在其中添加当前用户。当您从users集合中获取users时,只需检查请求用户是否是ignoredBy数组的一部分。所以你不会在数组中检查大量的条目,它总是只有一个。

yxyvkwin

yxyvkwin2#

我会这么做用户(user-A)查询一个人员池,每个人都由自己的文档表示。然后,用户A必须对每个人(文档)采取动作,并且假定当采取动作时,该人不应再出现在用户A的查询中。我们不应该编辑查询的文档,因为这样每个用户都会编辑相同的文档,而文档有字节和写入限制。出于同样的原因,我们也不应该使用数组。相反,我们应该将集合视为使用文档作为项的数组,因为集合没有文档限制。
因此,每当user-A对其他人(user-X)执行操作(向左/向右滑动)时,在user-A下的子集合中创建一个新文档,该子集合仅包含user-X的uid,可能还有像didLike这样的布尔值,可能还有时间戳-我们永远不知道这些东西何时会派上用场。
当user-A在将来的某个时候执行另一个查询时,user-X将重新出现在结果中,我们现在需要过滤掉它。我们所要做的就是检查user-X的user-A子集合。如果user-X在此子集合中,则忽略该文档并移动到下一个人。如果用户界面像Tinder一样配置,其中没有滚动的人列表,而是堆叠在彼此之上的卡片,这没什么大不了的。user-A一次只能看到一个人,他们不知道我们在幕后过滤了多少人。然而,对于可滚动的分页列表,用户A可能会看到奇怪的行为,如不均匀的页面。
这个模型可以扩展到虚拟无穷大。

相关问题