首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase查询,从单个集合中获取多个文档,其中每个doc.id都等于单独列表中的id

问Firebase查询,从单个集合中获取多个文档,其中每个doc.id都等于单独列表中的id
EN

Stack Overflow用户
提问于 2020-10-16 04:31:02
回答 2查看 1.2K关注 0票数 0

我正在使用firebase构建一个简单的原生react应用程序,用户可以在其中创建帖子,查看其他用户的帖子列表,并且帖子可以保存为“保存的帖子”作为我的users集合中的一个子集合。

我刚接触react-native和firebase,所以这只是出于教育目的。

我被困在查询我的“保存”列表的帖子中。目前,当用户点击“保存”按钮时,“保存的帖子”的子集就会被添加(或创建)到帖子id中。我不想将整个帖子数据重写到用户保存的列表中,只想通过帖子id创建一个对帖子的引用。

我可以保存列表,但不能查询firestore中与每个帖子id相关联的文档。

目前,我可以根据用户id进行查询,以检索他们自己的帖子列表,因为authorID与用户uid匹配,我认为获取保存的帖子应该是相似的。

下面是我的代码,用于获取用户自己的帖子列表:

userId是表示user.uid的单个字符串

代码语言:javascript
复制
const getUserPosts = async (userId) => {
    const snapshot = await firebase
      .firestore()
        .collection('posts')
        .where('authorID', '==', userId)
        .get();
    let data = snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() }));
    return data;
};

此函数被导出,然后包装在组件内的try catch语句中。

上述方法和获取已保存帖子的用户列表之间的区别在于,我需要输入多个不同的“postId”(而不是单个userID),但是.get()方法不接受第一个参数的数组,它需要一个单独的字符串。

为了快速总结,我需要一个方法或函数,在其中我可以获取一个postId数组,并查询我的posts集合,以返回其中doc.id与提供的postId匹配的那些帖子。

如果这一点不清楚或令人困惑,我道歉,我在这一点上有点迷惑。

任何建议都将非常受欢迎。

非常感谢您的宝贵时间!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-16 05:01:43

您可以使用"in" query和FieldPath.documentId()一次查询多个文档ID

代码语言:javascript
复制
const array = [...];
const snapshot = await firebase
  .firestore()
    .collection('posts')
    .where(firebase.firestore.FieldPath.documentId(), 'in', array)
    .get();

但这只在数组长度小于10个项目时才有效(Firestore限制)。如果需要更多,则必须将is批处理到较小的数组中并执行多个查询,或者简单地迭代is,然后分别对每个文档执行get() (这很好,真的,不用担心性能问题)。

票数 4
EN

Stack Overflow用户

发布于 2020-10-16 06:39:29

它正在工作:)

非常感谢Doug Stevenson的帮助!

下面是函数:

postedId是一个id数组,引用来自' posts‘集合的已保存帖子的id

代码语言:javascript
复制
`export const getSaveData = async (postedId) => {
 const array = [postedId];
 const snapshot = await db.collection('posts').get();
 const data = snapshot.docs.map((doc) => ({ postedId: doc.id, 
 ...doc.data() }));
 return data;
 };`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64379227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档