Причина, по которой все узлы удаляются, заключается в следующей строке:
applesQuery.getRef().removeValue();
Вызов Query.getRef()
возвращает местоположение, в котором выполняется этот запрос.Поскольку applesQuery
является запросом к post
, applesQuery.getRef()
возвращает сам узел post
.Таким образом, applesQuery.getRef().removeValue()
удаляет весь узел post
.
В Firebase не существует понятия "запрос на удаление", куда вы отправляете DELETE FROM customer WHERE post = postid
.Firebase может удалить узел только тогда, когда он знает его точный путь.Это означает, что вам нужно будет выполнить запрос, просмотреть его результаты и удалить каждый из них.
В коде:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Query applesQuery = ref.child("customers").orderByChild("post").equalTo(postid);
applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
postSnapshot.getRef().removeValue()
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}
Обновление : я заметилчто значение свойства post
совпадает со значением ключа клиента.Если это всегда так, вам не нужен запрос для удаления узла, и вы можете просто сделать:
ref.child("customers").child(postid).removeValue();