2017-02-17 11 views
0

私の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ノード全体が、この単一の呼び出しで削除され、ブックマークが必要だというだけではなくなります。ノード全体ではなく削除したいブックマークを削除するだけでどうしたらいいですか?

答えて

1

Firebaseデータベースに対してクエリを実行すると、結果が複数存在する可能性があります。したがって、スナップショットにはそれらの結果のリストが含まれています。結果が1つだけの場合でも、スナップショットには1つの結果のリストが含まれます。

あなたの場合、スナップショットはアイテムではありませんが、クエリの合計結果です。したがって、そのgetRef()は、クエリを実行した場所を返します。

ソリューションは、結果をループにし、個別に削除します。

public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot child: dataSnapshot.getChildren()) { 
     child.getRef().removeValue(); 
    } 
} 
+0

さらに詳しい質問があります。 .orderBy()と.equalTo()を追加するオプションがあるが、結果が実際に唯一の結果を返すわけではない場合、それらを使用するポイントは何ですか?そのブックマークのUUIDはデータセットに1つだけですが、クエリはデータセット全体を返します。 これは答えに見えましたが、私はFirebase内で何かを探していました。私はより良いクエリを作成し、データセット全体を返し、結果を解析するループを繰り返す必要はありません。 – Landen

+0

値は一意である必要はないため、クエリは複数の結果と一致する可能性があります。あなたの特定のケースでは結果が1つしかないので、戻り値の型は変更されません(ほとんどの型付き言語では不可能です)。 –

0

は、なぜあなたはすぐ下のコードを試し、そのノードのSingleValueEventのために聞いています。

FirebaseDatabase.getInstance().getReference().child(MyConstants.FIREBASE_USERS_NODE).child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(MyConstants.FIREBASE_BOOKMARKS_NODE).child(uuid).removeValue(); 
関連する問題