我试图在Firestore中设置朋友系统。我的数据模型目前看起来像这样:
collection("users") ->
document("user1")
document("user2")
...
users
集合中的文档包含用户的name
,email
...等数据。我想让用户现在有朋友,但我不确定对此进行建模的最佳方式。
因此,我确定在用户的文档中添加了friends
字段,但该字段应包含哪些内容?我的第一个想法是指向一个名为friends的新集合的指针,其中文档是用户。像这样:
collection("users") {
document("user1") {
name:user1,
friends: -> collection("friends") {
document("user2"),
...
}
}
}
这似乎是合理的,但这意味着我的数据库中有大量重复数据,因为每个有朋友的用户都会在friends
集合中重复。我应该担心这个还是在Firestore数据库结构中这是正常的?
是否可以指向users
集合中friends
集合中的文档?类似的东西:
collection("users") {
document("user1") {
name:user1,
friends: -> collection("friends") {
document, -----
... |
} |
}, |
document("user2")<-
}
或者我应该抛弃为朋友使用收藏品的想法,并且只保留一份包含用户所有朋友的用户名单的列表?
答案 0 :(得分:0)
似乎您正在为users
和friends
使用两个单独的集合,首先您可以通过一个集合执行此操作。但我不想去那里可能还有另一种情况。
作为单独的收集方式,您可以设计friends
收集模型以避免重复:
{
name : 'Name',
email : 'email@mail.com'
has_connected : {
'user1' : true // here you can use anyother unique key from user
}
}
问题是 firestore 推荐这种类型的设计用于查询,为了提高性能,您可以将has_connected
密钥作为索引。
在这种方法中,您必须在通过电子邮件或任何其他唯一密钥添加新朋友时进行检查。如果存在,则只需将另一个密钥放入has_connected
与相应的用户。例如user2 : true
。
最后,为了获取用户的所有朋友,您必须执行以下查询:例如:在javascript中
let ref = firebase.firestore().collection("friends");
ref
.where(`has_connected.${username}`, "==", true)
.get()
.then(//do your logic)
.catch()
由于