我有一个像这样的数据库
用户/ UID1 /"用户名" (用户1)
/UID2/"Username" (of user 2)
/UID3/"Username" (of user 3)
/UID4/"Username" (of user 4)
依旧......
我想检查用户名是否存在,但我没有设法进入包含所有现有UID的循环。 现在我试过了:
让databaseRef = Database.database()。reference()
databaseRef.child("users").child("uid").child("Username").observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
switch snapshot.value {
case let value as Bool where value:
// value was a Bool and equal to true
print ("username found")
default:
// value was either null, false or could not be cast
print ("username not found")
}
})
}
我不知道该放什么而不是孩子(" uid")循环到我数据库中的每个uid并检查用户名是否存在
感谢您的帮助!
答案 0 :(得分:1)
在Android中
DataSnapshot实例包含Firebase数据库位置的数据。每次读取数据库数据时,都会以DataSnapshot的形式接收数据。
DataSnapshot
有exists()方法检查记录是否存在。基于此文档https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#exists()
赞:
reciverDatabase.getRef().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
reciverDatabase.child(Constants.CONVERSATION_UNREAD_COUNT).setValue(dataSnapshot.getValue(Long.class) + 1);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Crashlytics.logException(databaseError.toException());
sendMessageListener.onSendMessageFailure(databaseError.getMessage());
}
});
在iOS中:
你可以检查它:
对于目标C: 的存在强>
Desc:如果DataSnapshot包含非空值,则返回YES。
对于Swift:
<强>存在()强>
func exists() - &gt;布尔
答案 1 :(得分:1)
实现这一目标的最简单方法是注册用户,使用其唯一的UID创建用户并将所有数据保存在那里,就像你正在做的那样但也创建一个名为“usernames”的节点,该节点只保存所有用户名,注册时使用密钥作为用户名,值为1,如下所示:
Usernames {
- username: 1
}
当用户注册然后输入用户名时,您可以检查它是否存在:
let username = "username that user has typed in"
let reference = Database.database().reference()
reference.child("usernames").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(username) {
print("Already exists")
} else {
print("Doesn't exist")
}
}, withCancel: nil)
修改强>
感谢@FrankvanPuffelen,这是一种更有效的方法 - 无需遍历每个用户名。
let reference = Database.database().reference()
reference.child("usernames").child(username).observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
print("Username already exists")
} else {
print("Username doesn't already exist")
}
}, withCancel: nil)