我真的是Firebase的新手。我在这里读过类似的话题,但还是听不懂。
这就是我想要做的:
我将父键设置为uid,并将键:将值都设置为用户名,原因是我读到,如果这样做,它将不允许使用相同的键,但我不理解,它仍会覆盖键和值
我的Firebase规则设置为true,因为这只是一个示例项目。我希望有一个人可以帮助我。谢谢!
答案 0 :(得分:0)
您可以添加代码吗?就我而言
databaseReference.child("user_info").child(f_user.getUid()).child("username").setValue(f_user.getUid());
此代码可以防止重复写入。
但是如果您这样设置代码,我的意思是使用push()。
databaseReference.child("user").push().setValue(user);
此代码无法防止重复写入。
答案 1 :(得分:0)
我建议您使数据库结构如下:
rootReference
|
-- uid1
|
- username
|
- email
|
- other_details
|
-- uid2
|
- username
|
- email
|
- other_details
这种数据库结构不仅可以帮助您使每个孩子都独一无二,而且还可以帮助您搜索将来可能需要的具有特定username
或email
的用户。
这种数据库结构使您可以轻松地使用orderByChild()
进行查询,并将username
和email
存储在uid下。
要查找用户名是否唯一,可以使用带有orderByChild()
的简单查询,如下所示:
reference.orderByChild("username").equalTo(userNameYouWantToSearch).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
// do what you want
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { // ToDo: do something for errors
}
)};
在if()
语句中,您只能说userNameYouWantToSearch
已经存在于数据库中,因此不是唯一的。