Firebase 实时数据库 datasnapshot.has Child

Posted

技术标签:

【中文标题】Firebase 实时数据库 datasnapshot.has Child【英文标题】:Firebase Reatime Database datasnapshot.hasChild 【发布时间】:2021-12-16 11:57:22 【问题描述】:

在 Firebase 实时数据库中,有数千个子节点(用户)。如果我使用snapshot.hasChild(user1) 它是一种有效的方式(我的意思是轻量级操作),还是有其他方式?

我担心的是下载所有子节点的功能。

【问题讨论】:

【参考方案1】:

DataSnapshot 是某个位置或匹配某个查询的所有数据的快照。如果您下载数千个节点来检查其中一个是否存在,那您肯定是在浪费带宽。

您是否考虑过只加载child(user1) 的数据?

说你现在有这个:

myReference.addListenerForSingleValueEvent(new ValueEventListener() 
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 
        if (dataSnapshot.hasChild(user1)) 
            ...
        
    

    @Override
    public void onCancelled(DatabaseError databaseError) 
        Log.w(TAG, "Firebase:onCancelled", databaseError.toException());
    
;

您可以通过仅加载 user1 子节点来获得相同的结果:

myReference.child(user1).addListenerForSingleValueEvent(new ValueEventListener() 
          // ? only load the one node we care about
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 
        if (dataSnapshot.exists())  // ? check if the snapshot exists
            ...
        
    

    @Override
    public void onCancelled(DatabaseError databaseError) 
        Log.w(TAG, "Firebase:onCancelled", databaseError.toException());
    
;

【讨论】:

以上是关于Firebase 实时数据库 datasnapshot.has Child的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 Firebase 实时数据库转移到 Firebase Cloud Firestore

如何将我的 Firebase 实时数据库转移到 Firebase Cloud Firestore

如何使用 Firebase 实时数据库?

多个用户的 Firebase 实时数据库身份验证

Firebase 实时数据库文件大小

为啥注册用户后 Firebase 实时数据库用户 ID 与 Firebase 身份验证 UID 不匹配?