Firebase数据库节点"内存/"包含Memory {String name;类型的对象成本; ...}我需要获得具有特定"名称"的对象。字段(例如" party")并删除它们或更改" cost"其他情况下的字段值。 我试过这个......
memoryRef.orderByChild("party").equalTo(true).setValue(null);
错误
我已经读过这个...... https://firebase.google.com/docs/reference/js/firebase.database.Query
那里只有动作处理程序...请帮忙,我感觉它应该很简单......
答案 0 :(得分:2)
您可以使用查询:
Query query = memoryRef.orderByChild("name").equalTo("party");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for (DataSnapshot child : dataSnapshot.getChildren()) {
//to update:
memoryRef.child(child.getKey()).child("cost").setValue(100);
//delete
memoryRef.child(child.getKey()).removeValue();
}
}
});
注意:请记住在" name"上设置indexOn规则。记忆
您的规则应如下所示:
{
"rules": {
...
"memories": {
".indexOn": "name"
}
}
}
答案 1 :(得分:0)
可能有更理想的方法,但这对我有用:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("memories");
ValueEventListener memListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
memoryList = new ArrayList<>();
Memory memory;
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
int cost = (int) userSnapshot.child("cost").getValue();
String name = (String) userSnapshot.child("name").getValue();
//Get other fields here
if (name.matches("party")) {
memory = new Memory(name , cost);
memoryList.add(memory);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mDatabase.addValueEventListener(memListener);
PS:我只是将它添加到数组中......您可以根据需要更改它