如何根据属性值更新 Firebase 数据库中的条目

How to update entry in Firebase Database based on an attribute value

我在 Java 中将 Firebase 实时数据库与 Android 一起使用。我有以下数据库截图:

我想更改属性为“ingredient_name = 青柠”的成分的可用性值(从 0 到 1)。 ingredient_name 属性实际上类似于主键,意味着不会有其他具有此特定名称的数据库条目。

我尝试了以下代码

DatabaseReference rootRef;
rootRef = FirebaseDatabase.getInstance("https://....app").getReference();
String ingredientToBeUpdate = "Lime";

rootRef.child("ingredients").orderByChild("ingredient_name").equalTo(ingredientToBeUpdate).child("availability").setValue(1);

但我收到错误消息“无法解析 'Query' 中的方法 'child'”。你能告诉我如何正确地进行这个更新吗?所以我想更新属性 "ingredient_name" 等于某个字符串 ingredientToBeUpdate.

的数据库条目的值

Firebase 不支持所谓的更新查询,在这种情况下,您将条件和新数据发送到数据库,数据库会为所有符合条件的节点写入新数据。

相反,您需要在应用程序代码中执行查询,遍历结果,然后依次更新每个结果:

rootRef
  .child("ingredients")
  .orderByChild("ingredient_name")
  .equalTo(ingredientToBeUpdate)
  .addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot ingredientSnapshot: dataSnapshot.getChildren()) {
            ingredientSnapshot.getRef().child("availability").setValue(1);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

另见:

  • Is it possible to update a specific child's value without ID or key in firebase realtime database from android on button click?