为了账号安全,请及时绑定邮箱和手机立即绑定

Firestore 获取与值数组中的项匹配的任何值

Firestore 获取与值数组中的项匹配的任何值

不负相思意 2022-08-18 15:45:26
在如何与firestore进行一些关系查询同时坚持最佳实践方面,我面临着一些心理障碍。我正在创建一个Feed功能,您可以在其中查看来自朋友的帖子的Feed。从本质上讲,我的数据结构如下:Friends (collection)-friend_doc  ...data  friends_uid: [uid1, uid2]Posts (collection)-post_doc  ...data  posted_by: uid2基本上,我正在进行查询以获取friends_uid包含我的uid(在本例中为uid1)的所有朋友。然后,一旦我将所有朋友的uid映射到一个数组,我想做一个firestore查询,以获得posted_by字段等于该朋友uid数组中的任何uid的帖子。我还没有能够做出类似的事情。我知道循环访问朋友uid的字符串数组并为每个数组进行查询似乎最方便,例如:  listOfUids.forEach(async (item) => {    const postQuerySnapshot = await firestore()      .collection('posts')      .where('uid', '==', item)      .get();    results.push(postQuerySnapshot.docs);  });但这对于分页和限制数据来说是非常成问题的,因为我可能会收到大量的帖子。我可能只是太深入这个代码,缺少一个明显的解决方案,或者我的数据结构有些缺陷。任何见解将不胜感激。
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我想你正在寻找一种条件。这样,您最多可以传递10个值,它将返回字段与任何这些值匹配的所有文档。in

有关这方面的详细信息,请参阅有关查询中的 Firebase 文档。

如果 UID 超过 10 个,则仍必须执行多个查询并在客户端合并结果。


查看完整回答
反对 回复 2022-08-18
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

对于任何正在寻找如何在firestore中实现类似的“feed”类型功能的人来说,这就是我最终如何解决它:

我在数据结构以及帖子集合中添加了一个users_feed集合,并处理了在云函数内部生成源的问题。users_feed集合充当中介,因此客户端只需要从中提取数据,而无需生成源。所有繁重的工作都发生在云功能中

在云函数中,每当发布(onCreate)或更新(onUpdate)帖子时,它都会获取发布该帖子的人的朋友列表,并将其写入他使用批处理写入集合users_feed中的所有提要中。

我发现另一篇文章在提出结构方面非常有用:哪个是用于获取社交媒体源的更优化的Firestore模式?


查看完整回答
反对 回复 2022-08-18
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信