私のfirebaseデータベースから値を削除するためのガイドhereに従っています。ここに私のデータの構造があります。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) {
}
});
何が起こっているかは、/ bookmarksノード全体が、この単一の呼び出しで削除され、ブックマークが必要だというだけではなくなります。ノード全体ではなく削除したいブックマークを削除するだけでどうしたらいいですか?
さらに詳しい質問があります。 .orderBy()と.equalTo()を追加するオプションがあるが、結果が実際に唯一の結果を返すわけではない場合、それらを使用するポイントは何ですか?そのブックマークのUUIDはデータセットに1つだけですが、クエリはデータセット全体を返します。 これは答えに見えましたが、私はFirebase内で何かを探していました。私はより良いクエリを作成し、データセット全体を返し、結果を解析するループを繰り返す必要はありません。 – Landen
値は一意である必要はないため、クエリは複数の結果と一致する可能性があります。あなたの特定のケースでは結果が1つしかないので、戻り値の型は変更されません(ほとんどの型付き言語では不可能です)。 –