更新 Firebase 中键的值

Posted

技术标签:

【中文标题】更新 Firebase 中键的值【英文标题】:Update value of key in Firebase 【发布时间】:2016-12-02 17:36:44 【问题描述】:

在以 web 和 android 作为客户端的 Firebase 应用程序中拥有 Firebase 实时数据库。使用push() 方法将值插入数据库,该方法生成随机键,并且所有子键值对由Web 客户端存储在子项中。现在,我想通过 android 更新特定子项的一些键值对。例如

KHSIHJKJBNJXKCB -
     name="xyz"
     age=19
JHGISFUSHFIJDSF -
     name="abc"
     age=20

如何更新特定键的“年龄”属性,不使用键 KJHUJHDFIUSH 等,就像将年龄更新为 25,其中名称为“abc”。

更新

其中“学生 0”被 Firabase 生成的一些随机值替换。所以我想将值“isCertificateReady”更改为 false。如何在不知道节点密钥的情况下引用特定节点。在本例中,我们可以使用联系电话作为唯一 ID。

我用来解决问题或得到答案的代码

coachingDatabaseReference.orderByChild("contactNumber")
    .equalTo(contactNumber)
    .addListenerForSingleValueEvent(new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            String key = dataSnapshot.getKey();

            coachingDatabaseReference.child(key)
                .child("isCertificateReady")
                .setValue(false);
        

        @Override
        public void onCancelled(DatabaseError databaseError) 
        
    );

【问题讨论】:

【参考方案1】:

为此,您必须使用查询 就像在 Android 中一样myRef.orderByChild("age").equalTo("20").addListenerForSingleValueEvent(...Query

然后您可以使用datasnapshot.getKey() 调用它的key 然后更新值Update Specific Keys

【讨论】:

我拿不到钥匙。 Listener 永远不会接到任何电话。因为实际上没有值变化所以监听器不会得到任何调用。 @DushyantSuthar 你做得对吗?堆栈上有大量的解决方案可供查看。你能用代码展示你的实现吗? @DushyantSuthar 如果没有当前值,将使用空/null 快照调用 value 侦听器。如果这对您不起作用,请分享minimal code that reproduces the problem。 n 每次启动活动或任何代码时都会调用它。 @FrankvanPuffelen 我添加了更多内容。我希望我会工作。感谢您考虑。【参考方案2】:

如果名称不是唯一的,请为您的学生对象添加一些唯一的 ID。 如果我们假设名称是唯一的,那么运行事务并更新内部的特定值是安全的,如下所示。

myRef.orderByChild("name").equalTo("abc").runTransaction(new Transaction.Handler() 
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) 
        Student s = mutableData.getValue(Student.class);
        if (s == null) 
            return Transaction.success(mutableData);
        

        s.setAge(20);
        // Set value and report transaction success
        mutableData.setValue(s);
        return Transaction.success(mutableData);
    

    @Override
    public void onComplete(DatabaseError databaseError, boolean b,
                           DataSnapshot dataSnapshot) 
        // Transaction completed
        Log.d(TAG, "postTransaction:onComplete:" + databaseError);
    
);

【讨论】:

以上是关于更新 Firebase 中键的值的主要内容,如果未能解决你的问题,请参考以下文章

修改 boost unordered_map 中键的值

我怎样才能得到firebase中键、值对的计数? [关闭]

如何替换 Python 中键的值?

更新 Firebase 中的值

如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值

如何获取 couchdb 中键的值