我的数据库的屏幕截图
我想通过返回具有某些相似子节点的所有父节点的名称来查询我的数据库。
我已经在获取一个父级与其子级的名称,但我想获取具有相似子级值的所有父级的名称。
假设,我想获取具有相似子节点值 2000
且评级为 3 星级
的酒店名称。
final List<String> hotelNames = new ArrayList<String>();
final Query userQuery = FirebaseDatabase.getInstance().getReference().child("F-5").orderByChild("HotelTypeTwo");
userQuery.equalTo(varX).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot foodSnapshot: dataSnapshot.getChildren()) {
hotelNames.add(foodSnapshot.getKey());
for (int i=0;i < hotelNames.size();i++)
{
Log.i("Value of element "+i,hotelNames.get(i));
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
);
最佳答案
因此,要获取 HotelTypeTwo
等于 Desi
的所有酒店,并根据您的屏幕截图获取结果:Islamabad Hotel
和 伊斯兰堡万豪酒店
,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference fRef = rootRef.child("F-5");
Query query = fRef.orderByChild("HotelTypeTwo").equalTo("Desi");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String hotelName = ds.getKey();
Log.d(TAG, hotelName);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
query.addListenerForSingleValueEvent(valueEventListener);
logcat 中的结果将是:
Islamabad Hotel
Islamabad Mariott Hotel
遗憾的是,Firebase 中不允许查询多个属性。我在以下帖子中的回答可以是解决方法:
但是,在 Firestore compound queries允许:
citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver");
关于java - 如何在Firebase数据库Android上获取具有相似子节点的所有父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074307/