如何根据属性值更新 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?
我在 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?