【问题标题】:Allow users from different collection see a different stream允许来自不同集合的用户看到不同的流
【发布时间】:2020-07-13 15:31:29
【问题描述】:

我有一个 Orders 集合。它包含一个名为venueId 的字段。我正在使用isEqualTo 查询该字段。场地 ID 是 Firebase 用户 uid。我也有场地收藏。它包含这个场所 ID,还有一个 VenueAdmins id 列表(这些 id 也是 firebase 用户 uid)该应用程序是一个销售点应用程序(pos)。我需要查询订单集合,以便 valueAdmins 和 placeId 看到正确的流。很容易用venueId查询..venueId,isEqualto, uid。我想知道让场地管理员也能看到直播的最佳方法是什么。

|-Orders   // collection
    order.   //doc
     venueId:'2344567788999999' 


|-Venues   // collection
    venue.   //doc
     venueAdmin: ['3333333333333','55555555555555555']
     venueId:'2344567788999999'

到目前为止我的查询生成器: queryBuilder: (query) => query.where('venue.id', isEqualTo: uid)

【问题讨论】:

  • 我不清楚这里有什么问题。
  • 如果venueAdmin 3333333333333登录了,他怎么可能看到订单流。他不是venueId,我如何查询流以便他可以看到正确的订单
  • 我不明白哪个用户登录有多重要。只要您的安全规则允许,您的用户应该能够查询他们需要能够阅读的文档。如果您的查询未按预期方式运行,请编辑问题以显示该代码。
  • 我认为用户很重要,因为我正在使用该值进行查询。通过上述查询,登录用户将看到过滤后的流。因为他的uid isEqualTo:venueId。我也在为管理员寻找一种方式来查看流
  • 您实际上是在问如何根据场地管理列表字段中的值过滤查询中的场地吗?

标签: firebase google-cloud-firestore


【解决方案1】:

Firestore 无法在单个查询中“加入”来自不同集合的文档。单个查询一次只能考虑单个集合中的文档。按照您现在构建数据的方式,它至少需要两个查询。第一,找场地,第二,找场地管理员的订单。

从查询的角度来看,使这一过程变得更容易的唯一方法是通过将场地数据复制到订单文档中来对数据进行非规范化。如果每个订单还有一个管理员列表,那么您可以将其缩减为一个查询。

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多