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



这是我的数据库的图像:https://i.stack.imgur.com/prxs9.jpg

我想在用户下更新子JtFpeu4kH7YApizjlq6KO4kfKjF2并添加event_id -L0rlisR_ExF1lMGUTeV。在这里,JtFpeu4kH7YApizjlq6KO4kfKjF2是用户在我的应用中使用Firebase注册的用户ID。这不是"推" ID。我正在根据电子邮件搜索。因此,伪代码将是:

找出是否有 email = 'dummy@gmail.com'的节点。

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

如果没有,然后将其放在一个名为"无人认领"的新孩子中

但是,使用我的方法,如果找到匹配项,则将Event_ID设置为用子名称为Registered的用户ID之外的节点。我如何解决这个问题?

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);

                        }

如果要在一个Registered中的Events,则不是:

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,因此您有另一个叫Registered的孩子。

最新更新