【问题标题】:Search string into all Firebase database在所有 Firebase 数据库中搜索字符串
【发布时间】:2018-08-21 01:51:07
【问题描述】:

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

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

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

考虑到在实际情况下我有大量的字段,我该怎么做?

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

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

    您必须编写以下代码:

    1. 将整个数据库读入内存,并
    2. 递归下降每个键/值对,检查您想要的值。

    如果您需要适当的搜索机制,请将您的数据镜像到搜索引擎并进行查询。

    【讨论】:

      【解决方案2】:

      假设 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);
      }
      

      这将搜索每个孩子,并检查其中任何属性的任何值是否等于stringToCheck

      【讨论】:

      • 嗨斯特凡诺!你有没有试过我上面的解决方案,它有效吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多