3 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
你可以使用這樣的代碼orderByChild()和equalTo()所有領域有比較expensesName為特定值說“油”,并知道如果這樣的字段存在與否。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Expenses Details").child(uniqueID).child("Expense_Month").child("November_2018");
ref.orderByChild("expensesName").equalTo("oil").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
// do what you want here
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { // ToDo: do something about exceptions too
}
)};
這uniqueID是我可以在您的數(shù)據(jù)庫圖像中在相關節(jié)點之間看到的字符串。
編輯:
盯著結構看了一分鐘,我想我已經(jīng)找到了問題所在。這是行不通的,因為你有節(jié)點內November_2018,即3,4等等,這是上面的UNIQUEID節(jié)點之上expensesName。
這種層次結構是導致問題的原因,我建議您將計數(shù)保存在 uniqeID 內而不是在它之上,這將orderByChild()起作用。
與 NoSQL 數(shù)據(jù)庫一樣:如果您無法使用當前的數(shù)據(jù)結構執(zhí)行您想要的用例,您通??梢愿?擴展您的數(shù)據(jù)結構以允許用例。
通常這是通過非常直接地將您想要在屏幕上顯示的內容映射到數(shù)據(jù)庫中的結構來完成的。
帶有日期的數(shù)據(jù)庫可能如下所示:
-UniqueId
|
-- expensesName
-- date
-- total

TA貢獻1815條經(jīng)驗 獲得超6個贊
為了解決這個問題,我建議你稍微改變你的數(shù)據(jù)庫結構。由于無法在查詢中使用動態(tài)值或通配符,因此您的數(shù)據(jù)庫架構應如下所示:
Expense_monts
|
--- November_2018
|
--- -LQ ... Gb
| |
| --- expensesName: "gross"
| |
| --- total: 66
| |
| --- day: "Monday"
|
--- -LQ ... LO
|
--- expensesName: "oil"
|
--- total: 33
|
--- day: "Tuesday"
如您所見,沒有必要使用額外的子項(3,4等等)。在這種情況下,查詢如下所示:
expensesaddref = databaseReference.child(username).child("Expense_Month").child(monthyr);
expensesaddref.orderByChild("expensesName").equalTo("oil")
.addListenerForSingleValueEvent(/* ... */);
將工作得很好。

TA貢獻1816條經(jīng)驗 獲得超6個贊
感謝您對Alex、Aadil、Pradyuman 的所有回答。正如大家所建議的那樣,我已經(jīng)按照Aadil提到的那樣重構了我的查詢, 并且我可以根據(jù)需要查詢我的所有數(shù)據(jù)。這是我的結構
Expense_Month
|
--- November_2018
|
--- uniqueKey
| |
| --- expensesName: "gross"
| |
| --- total: 66
| |
| --- date_exp: "3_gross"
| |
| --- current_date: 3
|
--- uniquekey
|
--- expensesName: "oil"
|
--- total: 33
|
--- date_exp: "4_oil"
|
--- curent_date: 4
添加回答
舉報