将字符串搜索到所有Firebase数据库中

时间:2018-08-20 17:06:12

标签: firebase firebase-realtime-database

我需要在所有Firebase数据库中找到一个字符串(称为myDB)。该字符串不在特定字段中,但可以在任何子代中。这是一个例子。

{
  "lambeosaurus": {
    "dimensions": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "dimensions": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

我想在所有当前字段中找到字符串“ 15”:heightlengthweight

考虑到实际情况,我有很多字段,该怎么办?

2 个答案:

答案 0 :(得分:1)

实时数据库没有任何种类的全局搜索机制。

您必须编写以下代码:

  1. 将整个数据库读取到内存中,并且
  2. 递归地递归每个键/值对,检查所需的值。

如果您想要合适的搜索机制,请将数据镜像到搜索引擎中,然后进行查询。

答案 1 :(得分:0)

假设lambeosaurusstegosaurus是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