[英]Firebase exists() vs null
通常,当我检查数据库是否包含节点时,我会执行以下操作:
users = dbReference.getReference("users").child(someUser);
我不使用hasChild()
因为我知道在大型数据集上这可能需要一些时间来查询。 但是,最近我遇到了在文档中找到的方法exists()
现在我只是想知道这与我只是检查快照是否为空有什么不同? exists()
函数是如何工作的? 就像hasChild()
遍历数据集一样, esists()
做了什么?
它比检查 null 更好吗? 文档没有说太多
谢谢
更新 1
假设我有以下节点:
当用户想要注册时,我会检查此节点以查看用户名是否被占用:
userTakenNode.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(enteredUsername)) {
register();
}
}
如果没有使用用户名,那么我使用该用户名注册用户并将用户名添加到上面的节点。 现在我正在使用 hasChild() 我的理解,尽管这将遍历整个节点,直到找到它并返回它否则不会返回任何东西。 在大型数据集上,这可能需要很长时间。
有没有更快的方法来查询数据集?
您肯定只想检查特定的用户名。 因此,将您的侦听器附加到树中较低的一层:
userTakenNode.child(enteredUsername).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists) {
register();
}
}
但总的来说,这种场景更适合交易,它将获取节点的当前值和设置其新值组合到一个操作中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.