我遵循指導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
值不必是唯一的,因此查詢可以匹配多個結果。在你的具體情況下只有一個結果的事實不會改變返回類型(在大多數類型語言中這是不可能的)。 –