繁体   English   中英

Firebase 存在()与 null

[英]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() 我的理解,尽管这将遍历整个节点,直到找到它并返回它否则不会返回任何东西。 在大型数据集上,这可能需要很长时间。

有没有更快的方法来查询数据集?

存在的效率稍微高一点:

如果此 DataSnapshot 包含任何数据,则返回 true。 它比使用 snapshot.val() !== null 稍微高效一点。

Firebase 存在文档

您肯定只想检查特定的用户名。 因此,将您的侦听器附加到树中较低的一层:

userTakenNode.child(enteredUsername).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (!dataSnapshot.exists) {
            register();
        } 
    }

但总的来说,这种场景更适合交易,它将获取节点的当前值和设置其新值组合到一个操作中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM