Firebaseデータベースには存在する操作がありません。アイテムが存在するかどうかを知る唯一の方法は、アイテムを取得することです。
しかし、このような状況に対処する方法はいくつかあります。しかし、私はまずデータ構造を修正することをお勧めしたい:配列を持っていて、その上で包含操作をしようとすると、おそらくセットを使用したはずです。私は自分自身を繰り返す代わりに、私の答えをここで参照します:Firebase query if child of child contains a value。それを今読んで行く...あなたが戻ったとき私はここにいるでしょう。
names : {
"john": true,
"jack":true ,
"jason": true,
"jill": true,
"travis": true,
"alice": true
}
はるかに良い:あなたは配列対セットについて読んだことを今
は、あなたがあなたのデータは、より良いとして格納されていることがわかります。 :-)
あなたの質問に戻る:アイテムが存在するかどうかを確認するために検索する必要があります。私はそれをする2つの方法を考えることができます:リスト全体を取得するか、個々の項目を取得するかのどちらかです。
あなたは全体のリストを取得し、特定のアイテムをDataSnapshot.exists()
を使用します。
ref.child("names").addSingleValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.child("john").exists() && !snapshot.child("jane").exists()) {
...
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
// ...
}
});
代替は、個々のアイテムを取得することです:
1は、どのように多くに大きく依存最高の作品
ref.child("names/john").addSingleValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
...
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
// ...
}
});
あなたがリストにあると期待している名前。
ありがとうございました...フィックスリストはもっと構造化されています。しかし、私はfirebaseに** 90k-95k **の** list **を持っています。そして、私は5つの要素だけをチェックするための巨大なリストを検索することは良いアイデアだとは思いません。また、firebaseのリストとクライアント側のリストの両方が変更される可能性があります。だから、私はリストが変わるたびにfirebaseからリストを取得しなければならない。助言がありますか ? –
多くの名前では、実際にはリスト全体を取得しない方がよいでしょう。しかし、代替オプションはまだ適用されるはずです。 –