javascript - Firestore 根据数组中存在的值获取文档
问题描述
在坚持最佳实践的同时,我在如何使用 Firestore 进行一些关系查询方面面临着一些心理障碍。我正在创建一个提要功能,您可以在其中查看朋友的帖子提要。基本上我的数据结构如下:
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);
});
但这对于分页和限制数据来说是非常有问题的,因为我可能会收到大量的帖子。我可能对这段代码太深入了,错过了一个明显的解决方案,或者我的数据结构有些缺陷。任何见解将不胜感激。
TLDR - 如何进行 Firestore 查询以获取所有具有字符串数组中存在值的文档?
解决方案
您可以为此使用“in”查询:
firestore()
.collection('posts')
.where('uid', 'in', [uid1, uid2, ...])
但是您只能在该数组中使用 10 个元素。所以你可能不得不坚持你现在所拥有的。您将无法使用 Firestore 的分页 API。
对于这种情况,您唯一真正的选择是创建一个新集合,其中包含您要在一个地方查询的所有数据,因为没有真正的连接操作。像这样复制数据对于 nosql 类型的数据库很常见。
推荐阅读
- f# - 如何将“Hello ML.NET World”示例翻译成 F#?
- r - R 中的 RFsimulate() 函数的 rfInit 错误
- r - 开始安装 R studio 但看不懂指令
- java - 如何在 Linear 中将 GIF 设置为背景?
- azure-logic-apps - 如何在不启用存储帐户公共访问的情况下将 Azure 存储帐户连接到逻辑应用程序?
- python - Python 将 SSAS 与 pyadomd 连接起来
- julia - Julia 中的内核 PCA 实现
- tensorflow - tf.gradients 加载大量 RAM
- javascript - 如何在高图散点图中添加垂直(和水平)线
- tensorflow - 使用 Google Colab 在 Tensorboard 中洗出/米色图像