Вы можете использовать код, подобный этому, с 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
- это строка, которую я вижу в образе вашей базы данных между соответствующими узлами.
Edit:
После минутного изучения конструкции я думаю, что нашел проблему. Это не работает, потому что у вас есть узлы внутри November_2018
, а именно 3
, 4
и т. Д., Над узлом uniqueID, который находится выше expensesName
.
Эта иерархия является причиной проблемы, я бы посоветовал вам сохранить счетчик внутри uniqeID, а не над ним, это заставит orderByChild()
работать.
Как обычно с базами данных NoSQL: если вы не можете выполнить нужный вариант использования с текущей структурой данных, вы можете изменить или расширить структуру данных, чтобы разрешить вариант использования.
И обычно это делается путем непосредственного сопоставления того, что вы хотите показать на экране, со структурой в базе данных.
Ваша база данных с датами может выглядеть так:
-UniqueId
|
-- expensesName
-- date
-- total