我遵循指导here从我的Firebase数据库中删除值。这是我的数据结构。从Android Firebase删除价值删除整个节点
|---users
|----KJSXd4ScEmJ6N4UFc5k
|---bookmarks
|---KdCyKdQkDg34ny6_H-C
|---id:"12d5j2fa-0f70-41c3-b4g4-4d66bdcef976"
|---KdCyKdQkDg34ny6_H-M
|---id:"fa95b1fa-b537-4d98-a0e7-a92ffea7b6a4"
这是我正在使用的代码。
FirebaseDatabase.getInstance().getReference().child(MyConstants.FIREBASE_USERS_NODE).child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(MyConstants.FIREBASE_BOOKMARKS_NODE).orderByChild("id").equalTo(uuid).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.getRef().removeValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
发生了什么事情是整个/书签节点在这个单一的调用中被删除,而不是仅仅是对想要的书签的引用。我可以如何实现删除单个要删除的书签而不是整个节点?
关于其他后续问题。如果您可以选择添加.orderBy()和.equalTo(),但结果并不真正返回唯一的结果,那么使用它们有什么意义?数据集中只有一个书签的uuid,但查询返回整个数据集? 这似乎是答案,但我一直在寻找Firebase内的某些东西,这些东西可以让我更好地查询,而不必只是返回整个数据集,然后循环解析结果。 – Landen
值不必是唯一的,因此查询可以匹配多个结果。在你的具体情况下只有一个结果的事实不会改变返回类型(在大多数类型语言中这是不可能的)。 –