删除子节点将删除所有其他节点



我的数据库如下:

User Categories
-> User ID
--> Fruits: true
--> Meats: true
--> Drinks
---> Product ID (under drinks node)
----> Product Name
----> Product Price

这里的问题是,如果我删除产品ID,饮料节点被删除,这不是我想要的。我想简单地删除产品ID节点。如何做到这一点?

这是我当前的代码:

DatabaseReference removeProductRef = FirebaseDatabase.getInstance().getReference("User Categories").child(currentUserID).child(categoryName).child(productId);
removeProductRef.removeValue();

这里它将删除productId子节点和它的所有子节点以及Drinks节点。

我也试过这样做,但同样的事情发生了:

DatabaseReference removeProductRef = FirebaseDatabase.getInstance().getReference("User Categories").child(currentUserID).child(categoryName);
removeProductRef.child(productId).removeValue();

处理:

DatabaseReference removeProductRef = FirebaseDatabase.getInstance().getReference("User Categories").child(currentUserID).child(categoryName);
removeProductRef.child(productId).removeValue();
removeProductRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
// Category exists in database
} else {
removeProductRef.setValue(true);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
// Handle error
}
});

在Firebase实时数据库中不可能有一个没有值的键。

当你第一次在Firebase实时数据库下写一个值时,它会自动创建一个键,当你从它下面删除最后一个/唯一一个值时,它会自动删除一个键。

在我计算数据模型时,作为一种变通方法,我有时会将具有节点描述的README属性放在实际值的位置。因为我的代码永远不会删除这个README属性,所以它所属的父属性也永远不会被自动删除。

也看到:

  • Firebase实时数据库,设置数据键(不包括值)
  • 在Firebase
  • 中创建空的子记录

最新更新