检查firebase子项是不是具有特定值[重复]

Posted

技术标签:

【中文标题】检查firebase子项是不是具有特定值[重复]【英文标题】:Check if firebase child has a specific value [duplicate]检查firebase子项是否具有特定值[重复] 【发布时间】:2018-11-13 11:23:08 【问题描述】:

我有一个基于 firebase 数据库的应用聊天,我想知道是否已经存储了特定值。

根据上面的结构,如何防止两个相等的值(红色)插入同一个孩子(蓝色)?

编辑

我解决了这个问题如下: 1)我通过唯一的用户名改变了每个节点的推送值; 2)我用下面的代码检查了重复值:

FirebaseDatabase.getInstance().getReference().child("friend").child(value_in_blue)
        .addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 
                if(!dataSnapshot.hasChild(username)) 
                    //value does not exists
                
            

            @Override
            public void onCancelled(DatabaseError databaseError) 
            
        );

感谢 Frank van Puffelen 和 Jins Lukose 在这个问题上给我指导。

【问题讨论】:

没有原子方法可以防止树中出现重复的。解决方案通常是有一个额外的数据结构,其中值用作键,因为根据定义,节点中的子键保证是唯一的。见***.com/q/39912201、***.com/a/25328654、***.com/a/20291163、***.com/a/35244705 【参考方案1】:

Firebase 提供 hasChild() 方法来检查 pirticuler 孩子的值是否存在。您可以参考link了解更多详情

【讨论】:

【参考方案2】:

试试这个

fdbRefer.child("give your value").addListenerForSingleValueEvent(new ValueEventListener() 
@Override
public void onDataChange(DataSnapshot dataSnapshot) 
if(dataSnapshot.exist() 
//comes here if exit

else 
//if not exist


);

【讨论】:

这样可以防止插入任何值! @afazolo 在插入下一个值之前使用它。我在一个项目中也使用过这个 好的。但是一旦我输入了一个值,我就不能再插入另一个了! @afazolo 我认为你有一些逻辑错误 也许吧。我会用你的方法做更多的测试。谢谢。

以上是关于检查firebase子项是不是具有特定值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何为具有特定子子值的子项检索 Firebase DatabaseReference?

firebase 查询如何从子项中检索两个特定值

如何更新 Firebase DB 中子项的特定值

Firebase 查询子项的子项是不是包含值

Firebase 查询子项的子项是不是包含值

排除具有特定子项的元素[重复项]