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

在如何与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);

  });

但这对于分页和限制数据来说是非常成问题的,因为我可能会收到大量的帖子。我可能只是太深入这个代码,缺少一个明显的解决方案,或者我的数据结构有些缺陷。任何见解将不胜感激。


不负相思意
浏览 112回答 2
2回答

LEATH

我想你正在寻找一种条件。这样,您最多可以传递10个值,它将返回字段与任何这些值匹配的所有文档。in有关这方面的详细信息,请参阅有关查询中的 Firebase 文档。如果 UID 超过 10 个,则仍必须执行多个查询并在客户端合并结果。

幕布斯6054654

对于任何正在寻找如何在firestore中实现类似的“feed”类型功能的人来说,这就是我最终如何解决它:我在数据结构以及帖子集合中添加了一个users_feed集合,并处理了在云函数内部生成源的问题。users_feed集合充当中介,因此客户端只需要从中提取数据,而无需生成源。所有繁重的工作都发生在云功能中。在云函数中,每当发布(onCreate)或更新(onUpdate)帖子时,它都会获取发布该帖子的人的朋友列表,并将其写入他使用批处理写入集合users_feed中的所有提要中。我发现另一篇文章在提出结构方面非常有用:哪个是用于获取社交媒体源的更优化的Firestore模式?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript