当前位置: 首页 > 知识库问答 >
问题:

如何在云Firestore查询中加入多个文档?

百里景山
2023-03-14

我有一个云Firestore DB,其结构如下:

    null
    null
let loadedPosts = {};
posts = db.collection('posts')
          .orderBy('timestamp', 'desc')
          .limit(3);
posts.get()
.then((docSnaps) => {
  const postDocs = docSnaps.docs;
  for (let i in postDocs) {
    loadedPosts[postDocs[i].id] = postDocs[i].data();
  }
});

// Render loadedPosts later

有人能想出一个优雅的解决这个问题的办法吗?

共有1个答案

陆宝
2023-03-14

在我看来相当简单:

let loadedPosts = {};
posts = db.collection('posts')
          .orderBy('timestamp', 'desc')
          .limit(3);
posts.get()
.then((docSnaps) => {
  docSnaps.forEach((doc) => {
    loadedPosts[doc.id] = doc.data();
    db.collection('users').child(doc.data().uid).get().then((userDoc) => {
      loadedPosts[doc.id].userName = userDoc.data().name;
    });
  })
});

如果要防止多次加载用户,可以缓存用户数据客户端。在这种情况下,我建议将用户加载代码分解成一个助手函数。但这将是上面的变体。

 类似资料:
  • 我有一个网站,用户可以做课程。当用户开始一个课程时,我希望将课程标识符添加到FireStore中的用户文档中。在网站上,用户有自己的个人资料页面。其中一个区段是正在进行的课程区段,用户可以在该区段中查看他们当前注册的课程。 我可以将课程文档键添加到用户文档上的一个字段中,一旦他们开始课程,该字段是一个字符串数组,包含另一个集合中文档的键。 GetRegrendCareersList=async()

  • 假设我有一个带有一些可选属性的数据模型。例如,它可以是具有“firstname”、“lastname”和可选的“网站”属性的用户对象。 谢了。

  • 在Firestore中,我有一个用户集合,在每个用户文档中存储一个名为favorites的集合,该集合包含标记为favorites(存储)的文档的ID 我可以采取另一种方法来获取两个集合并手动过滤它们,但我使用的是Firebase RecycerView适配器,它显示的所有数据都基于查询,这将使事情更加高效。 这样的结果是如何实现的呢?如果需要进一步的解释,请告诉我

  • 我正在为一个使用Cloud Firestore的项目规划我的DB的结构,目前我正在尝试找出存储数据并将其与用户关联的最佳方法。具体情况如下: 我在我的数据库的根部有一个用户文档的集合,我希望用户能够通过查看显示该用户的帖子的用户配置文件页面以及通过查看显示所有用户的帖子的页面来创建可以访问的帖子。 将用户的文章存储在用户文档的子集合中会使获取用户的文章用于其配置文件变得非常容易,但是是否可以编写一

  • 我希望在我的社交应用程序中实现朋友搜索功能。为此,我尝试在DB的“用户”集合中查询每个用户的文档,但它应该排除一些特定文档,例如当前用户已经是朋友的用户或请求待定的用户。 是否可以通过在Firestore中传递这些文档引用ID来查询所有用户文档,不包括特定文档。 如果没有,有人能说一种结构化数据的方法,以便我可以实现这个功能吗?谢谢。

  • 问题内容: 我正在使用Firebase函数和Firebase Firestore开发用于存储用户数据的API。 我想使用存储在其字段中的属性来查找文档。这是Firebase文档,其中说明了如何实现相同的功能。 我想处理两种情况 在没有文件的情况下 有两个以上具有当前条件的文件 如何处理以上两种情况? 问题答案: 按照上面的注释中的“讨论”,在Cloud Function中,您可以使用方法返回的方法