我需要在所有Firebase数据库中找到一个字符串(称为myDB
)。该字符串不在特定字段中,但可以在任何子代中。这是一个例子。
{
"lambeosaurus": {
"dimensions": {
"height" : 2.1,
"length" : 12.5,
"weight": 5000
}
},
"stegosaurus": {
"dimensions": {
"height" : 4,
"length" : 9,
"weight" : 2500
}
}
}
我想在所有当前字段中找到字符串“ 15”:height
,length
,weight
。
考虑到实际情况,我有很多字段,该怎么办?
答案 0 :(得分:1)
实时数据库没有任何种类的全局搜索机制。
您必须编写以下代码:
如果您想要合适的搜索机制,请将数据镜像到搜索引擎中,然后进行查询。
答案 1 :(得分:0)
假设lambeosaurus
和stegosaurus
是Firebase根目录的直接子级,要检查字符串号是否等于这些值之一,请使用以下方法:
private void checkValue(String stringToCheck) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
for(DataSnapshot ds : dSnapshot.child("dimensions").getChildren()) {
int value = ds.getValue(Integer.class);
if(value == Integer.valueOf(stringToCheck)) {
Log.d(TAG, "Value found!");
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
rootRef.addListenerForSingleValueEvent(valueEventListener);
}
这将搜索每个孩子,并检查其内any属性的any值是否等于stringToCheck
。