Javascript 获取Firebase collectionGroup中每个项目的父文档

Javascript 获取Firebase collectionGroup中每个项目的父文档,javascript,angular,firebase,google-cloud-firestore,Javascript,Angular,Firebase,Google Cloud Firestore,我有SQL方面的背景,正在努力了解文档存储。对于Firebase数据库结构,如下所示: 约翰(博士) 餐厅评论(收藏) 审查1(文件) 审查2(文件) 保罗(博士) 餐厅评论(收藏) 审查3(文件) 审查4(文件) 我正在使用CollectionGroup获取特定餐厅的所有评论(餐厅Id在评论文档上)。这很有效。我还想获得一些关于用户的元数据。在迭代返回的每个评论时,我可以通过二次查询实现这一点: restaurantReviewsSnapshot.forEach(revie

我有SQL方面的背景,正在努力了解文档存储。对于Firebase数据库结构,如下所示:

  • 约翰(博士)
    • 餐厅评论(收藏)
      • 审查1(文件)
      • 审查2(文件)
  • 保罗(博士)
    • 餐厅评论(收藏)
      • 审查3(文件)
      • 审查4(文件)
我正在使用CollectionGroup获取特定餐厅的所有评论(餐厅Id在评论文档上)。这很有效。我还想获得一些关于用户的元数据。在迭代返回的每个评论时,我可以通过二次查询实现这一点:

restaurantReviewsSnapshot.forEach(reviewSnap => {
   reviewSnap.ref.parent.parent.get().then(reviewerSnap => {
   ...

然而,这是没有效率的。是否有可能通过某种联接操作一次性获取这些相关数据?

在您的例子中,NoSQL世界中的一种经典方法是以一种易于构建和执行查询的方式对数据进行非规范化

更具体地说,这意味着在每个审查文件中,您将复制其作者的数据

这种方法的一个副作用是需要保持值同步(即用户/作者文档中的值和审阅文档中的值)。如果修改了作者文档,则可以通过触发云函数来完成此同步



同样,您不应该害怕复制数据和对数据模型进行非规范化。这里有一篇关于NoSQL数据建模方法的“著名”帖子:

额外的负载并不像你想象的那么慢,所以我想试试。也看到