【问题标题】:Firestore collections intersection?Firestore 集合路口?
【发布时间】:2020-12-02 04:06:42
【问题描述】:

我正在实施典型的追随者/追随者/朋友+饲料系统。对于我数据库中的每个用户,我有 3 个子集合:“followers”、“following”和“friends”。目前,我正在尝试按照以下三个业务规则实施提要:

  1. Feed 按日期排序
  2. 用户 A 可以在用户 B 的好友列表中而用户 B 不在用户 A 的好友列表中。
  3. 您可以看到那些您关注的用户也关注您或/和将您安排在他们的朋友列表中的用户的帖子。

就我而言,我想做的是在云函数中执行多次读取,因为实现第三条规则似乎并不容易......但现在我想知道是否可以进行查询这种风格(类似):

 currentUserFollowingRef = db.collection(...).doc(userId).collection("following")
 otherUserFollowingRef = db.collection(...).doc(otherUserId).collection("following")
 otherUserFriendsRef = db.collection(...).doc(otherUserId).collection("friends")
 
  // Some kind of intersection using queries (Pseudo)
 U1 = currentUserFollowingRef.where(firebase.firestore.FieldPath.documentId(), "in", otherUserFollowingRef)
                             .limit(10).get();

 // Other intersection
 U2 = currentUserFollowingRef.where(firebase.firestore.FieldPath.documentId(), "in", otherUserFriendsRef)
                             .limit(10).get();


 // Union of two sets using pure js
 UFinal = U1 union U2 (using js)

 /* Last step is to retrieve the last post of each user ordered by date using collection group queries */

有人知道如何做类似的事情来实现这一点(检索文档 也在其他收藏中)?

有什么需要考虑的吗?

谢谢。

【问题讨论】:

    标签: firebase google-cloud-firestore nosql


    【解决方案1】:

    Firestore 不支持您尝试执行的操作。查询一次只能考虑单个集合中的文档。无法“加入”其他集合中的文档。您必须完全按照您在问题中所说的去做 - “在云函数中执行多次读取”并将这些查询的结果合并到您的代码中。

    要么这样做,要么将数据复制到一个新集合中,该集合有效地“预连接”来自其他集合的数据以进行单个查询。但对于这种情况,这可能需要做很多工作。

    【讨论】:

    • 我尝试继续使用第一种方法,但似乎比第二种方法更昂贵且效率低下。我要做的是创建一个根集合“提要”(您的第二个建议),其中,对于每个用户,我将添加一个子集合,其中包含由云函数创建/删除的具有其他用户 ID 的文档(运行业务逻辑)按下“关注/取消关注/添加朋友/删除朋友”按钮时。
    猜你喜欢
    • 2021-08-12
    • 2021-11-02
    • 1970-01-01
    • 2019-08-07
    • 2020-08-19
    • 2021-11-25
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多