Firebase數據庫沒有存在的操作。所以知道一個項目是否存在的唯一方法是檢索它。
也就是說,有幾個選擇來處理這種情況。但我首先想要建議您修復您的數據結構:任何時候您有一個數組並嘗試對其執行一個包含操作時,您應該可能使用了一組數據。與其重複自己,我會在這裏參考我的答案:Firebase query if child of child contains a value。現在去讀吧...當你回來時我會在這裏。
現在,您已經瞭解套VS數組,你會看到你的數據更好,因爲存儲:
names : {
"john": true,
"jack":true ,
"jason": true,
"jill": true,
"travis": true,
"alice": true
}
好多了。 :-)
現在回到你的問題:你必須檢索一個項目來檢查它是否存在。我可以想到兩種方法來做到這一點:要麼獲取整個列表,要麼獲取每個單獨的項目。
您檢索整個列表,然後利用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());
// ...
}
});
另一種方法是檢索單個項目:
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 **元素的**列表**我並不認爲檢查列表僅僅檢查5個元素是一個好主意。此外,客戶端的Firebase和列表中的這兩個列表都可以更改。所以,無論何時列表發生變化,我都必須從firebase中檢索列表。有什麼建議麼 ? –
有了這麼多的名字,你最好不要檢索整個列表。但替代選項仍然適用。 –