如何根据另一个孩子的价值更新我的数据库中的某个值?

时间:2017-12-21 07:28:05

标签: android firebase firebase-realtime-database firebase-authentication

这是我的数据库的图像:https://imgur.com/a/AfZXS

我想更新用户下的子JtFpeu4kH7YApizjlq6KO4kfKjF2并添加event_id -L0rlisR_ExF1lMGUTeV。此处,JtFpeu4kH7YApizjlq6KO4kfKjF2是用户在我的应用中使用Firebase注册时生成的用户ID。这不是推动' ID。我正在搜索基于电子邮件。所以,伪代码将是:

查明是否存在email = 'dummy@gmail.com'的节点。

如果是,请在该节点中设置event_id = "-L0rlisR_ExF1lMGUTeV"

如果没有,那就把它放在一个名为“无人认领”的新孩子身上(这是有效的)

但是根据我的方法,如果找到匹配项,则event_id将设置为userId之外的节点,子项名称为Registered。我该如何解决这个问题?

final DatabaseReference RegUserCheck = FirebaseDatabase.getInstance().getReference().child("Users").child("Registered");
                RegUserCheck.orderByChild("Email").equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        if(dataSnapshot.getValue() == null) {

                          /*This adds to a child called 'unclaimed' since the 
                           email doesn't exist. This is working correctly*/

                            DatabaseReference Unclaimed = FirebaseDatabase.getInstance().getReference().child("Users").child("Unclaimed").push();
                            Unclaimed.child("Email").setValue(email);
                            Unclaimed.child("Events").setValue(event_key);
                        }

                        else
                        {


/*    THE FOLLOWING LINE JUST TAKES 'REGISTERED' AS THE KEY */
                            RegUserCheck.child(dataSnapshot.getKey()).child("Events").setValue(event_key);



                        }

1 个答案:

答案 0 :(得分:1)

如果您希望Events位于一个Registered内,请代替此:

RegUserCheck.child(dataSnapshot.getKey()).child("Events").setValue(event_key);

这样做:

RegUserCheck.child("Events").setValue(event_key);

这样你就有了:

Registered
     email: email@gmail.com
     User_id: id_here
     Events: -event_key

你得到额外Registered的原因是因为这个child(dataSnapshot.getKey())添加了一个带有dataSnapshot密钥的子项,而dataSnapshot在这里等于Registered因此你得到另一个名为{的孩子{1}}。