javascript – 如何在Cloud Firestore查询中加入多个文档?

前端之家收集整理的这篇文章主要介绍了javascript – 如何在Cloud Firestore查询中加入多个文档?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个具有以下结构的Cloud Firestore DB:

>用户

> [uid]

>名称:“测试用户

>帖子

> [id]

>内容:“只是一些测试帖.”
>时间戳:( 2017年12月22日)
> uid:[uid]

实际DB中存在更多数据,上面仅说明了集合/文档/字段结构.

我在我的网络应用程序中有一个视图,我正在显示帖子,并希望显示发布的用户名称.我正在使用以下查询获取帖子:

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

我想要做的是通过存储在post的uid字段中的uid查询用户对象,并将用户的name字段添加到相应的loadedPosts对象中.如果我一次只加载一个帖子就没有问题,只需等待查询返回一个对象,然后在.then()函数中再次查询用户文档,依此类推.

但是因为我一次收到多个帖子文档,因为异步,因此在每个帖子的用户/ [uid]文档上调用.get()之后,我很难弄清楚如何将正确的用户映射到正确的帖子他们回归的方式.

谁能想到这个问题的优雅解决方案?

解决方法

我会做1个用户doc调用和所需的帖子调用.
let users = {} ;
let loadedPosts = {};
db.collection('users').get().then((results) => {
  results.forEach((doc) => {
    users[doc.id] = doc.data();
  });
  posts = db.collection('posts').orderBy('timestamp','desc').limit(3);
  posts.get().then((docSnaps) => {
    docSnaps.forEach((doc) => {
    loadedPosts[doc.id] = doc.data();
    loadedPosts[doc.id].userName = users[doc.data().uid].name;
  });
});

猜你在找的JavaScript相关文章