每个用户都有一个具有相同键的项目列表,例如朋友。 我知道这个例子是错误的,因为每个键都应该是唯一的。 我怎么能用JSON格式呢?
{
"users" : {
"jmEcUjPaXVXHdsaddasdFrh1" : {
"Name" : "John",
"friends" : {
"Name" : "Peter",
"Name" : "Bob",
"Name" : "Lisa"
}
}
}
}
我试过了,但我不确定这是不是一个好的解决方案
{
"users" : {
"jmEcUjPaXVXHdsaddasdFrh1" : {
"Name" : "John",
"friends" : {
"Peter" : "true",
"Bob" : "true",
"Lisa" : "true"
}
}
}
}
#askFirebase
答案 0 :(得分:4)
您正在寻找的是存储一群朋友。
{
"users": {
"jmEcU..." : {
"Name" : "John",
"friends" : [
"Peter",
"Bob",
"Lisa"
]
}
}
}
但是,使用具有分布式数据的数组存在一些并发问题。我建议你真的阅读this post以了解在Firebase数据库中使用数组的含义。
如果在经过this section of the post之后,您确定无法使用数组,那么这里有一些关于新结构的建议
结构1:使用朋友的名字作为关键。您可以使用任何内容作为值,只要它不是null
即可。您可以循环遍历friends
的所有子项并获取密钥。
专业版:非常快速地了解用户是否是其他用户的朋友 - /users/{id}/friends/{name} exists
Con:每个朋友的名字必须是唯一的
{
"users": {
"jmEcU..." : {
"Name" : "John",
"friends" : {
"Peter" : true,
"Bob" : true,
"Lisa" : true
}
}
}
}
结构2:使用Firebase的Push
创建唯一ID并将其用作键,将朋友的名称作为值。您可以遍历friends
的所有子项并获取值。
专业版:朋友名称不一定是唯一的
{
"users": {
"jmEcU..." : {
"Name" : "John",
"friends" : {
"-JGnfnf..." : "Peter",
"-JGnfoi.." : "Bob",
"-JGnfuy.." : "Lisa"
}
}
}
}
如果您需要朋友的内容不仅仅是名称,我建议存储朋友的用户ID,而不是代表朋友详细信息的对象。如果你的用户ID是唯一的,那么这应该解决结构1的结果,并使它更好地用于两个选项。
答案 1 :(得分:1)
试试这个结构:
"users" : {
"{user_1}" : {
"email" : "geek@live.com",
"firstName" : "Geek",
"friends" : {
"{user_2}" : {
"status" : "pending",
"with" : {
"firstName" : "Anna",
"profileImage" : "http://..."
}
}
}
} ,
"{user_2}" : {
"email" : "anna@live.com",
"firstName" : "Anna",
"friends" : {
"{user_1}" : {
"status" : "pending",
"with" : {
"firstName" : "Geek",
"profileImage" : "https:..."
}
}
}
}
}