建模朋友关系以使用Firestore查询用户朋友的最佳方法

时间:2019-05-11 00:55:16

标签: firebase database-design nosql google-cloud-firestore

我想用Firestore查询一个用户(user1)与之成为朋友的所有用户。

当前,我在每个用户对象中都有一个“ friends”字段,因此,为了获得与user1是朋友的用户,我调用:

friendsOfUser1 = db.collection('users')。where('friends','array-contains',user1).stream()。

当用户只有<100个朋友时,这很好用,但是之后,由于user.friends数组具有许多值,用户对象变得非常大。这使接收用户对象变得昂贵。

有没有一种方法可以将friends数组存储在用户文档之外,同时仍然能够在一个查询中查询用户的朋友?这就是现在的结构:

user1:     {朋友:[“ user2”,“ user3”,“ user7”,“ user9”],     名称:“ John Sci”}

user2:     {朋友:[“ user1”,“ user4”,“ user8”,“ user12”],     名称:“埃尔莫广场”}

user3:     {friends:[“ user1”,“ user7”,“ user9”]}

因此db.collection('users')。where('friends','array-contains',user1).stream()将给出[user2,user3]。

1 个答案:

答案 0 :(得分:0)

将字符串存储在数组中的可伸缩替代方法是将相同的字符串存储在单独的文档中,通常作为主文档的子集合。

/users
    /{uid}
        /friends
            /{friendId1}
            /{friendId2}
            /{friendId3}

为了确定user1是否将user2作为朋友,您要做的就是使用两个用户的ID:/ users / user1 / friends / user2来获取文档。如果该文档存在,则存在关系。