来自firebase中多个国家/地区的查询列表

时间:2017-12-13 09:25:15

标签: android firebase firebase-realtime-database nosql

我想尝试NoSql并在Firebase开始我的项目。我的应用程序数据增加了很多。但是,现在我需要运行特定于国家/地区的应用,因此根据我的应用中的国家/地区显示/过滤数据。

我当前数据的结构如下。

{ clients:  {
  "04E2LBixKoVn9sGzRvxtMoC7MsF3" : {
    "clientName" : "Rising Mall",
    "contact" : {
      "branches" : {
        "-Kx6QoVhr0WpDQ3i68_n" : {
          "address" : "Test Location",
          "phone" : "999999999",
          "country": "USA"
        }
      },
      "mail" : "test@test.edu.np",
      "website" : "http://www.test.np"
    },
    "description" : "Test Description."}
  },
  "073ezb0UsgetSef0lwk50dhogjM2" : {
    "clientName" : "Leather Craft",
    "contact" : {
      "branches" : {
        "-Kx6QoVj_QKM7tjekh_1" : {
          "address" : "Test Location",
          "phone" : "888888888"
          "country": "UK"
        }
      },
      "mail" : "test@test.com",
      "website" : "https://www.test.com"
    },
    "description" : "Test"
   }
}

从上面的结构中,我想得到一个国家/地区所有客户的列表" USA"。如何通过在Android中查询FirebaseDatabase来直接执行此操作?可能吗?或者我是否必须完全更改数据库的结构?如果我必须重构我的数据库,也建议一个解决方案。

更新

我接受了@ alex-mamo给出的建议,并通过对数据进行非规范化来设计我的所有结构。

Firebase-root
    |
    --- usClients
           |
           --- usClientId1 : true
           |
           --- usClientId2 : true

1 个答案:

答案 0 :(得分:1)

要实现这一点,您不需要完全重构数据库,只需稍微更改一下即可。要解决此问题,您需要将另一个节点添加到名为usClients的数据库中。每次添加来自USA的新用户时,也要在此新创建的节点中添加它。您的新节点应如下所示:

Firebase-root
    |
    --- usClients
           |
           --- usClientId1 : true
           |
           --- usClientId2 : true

使用此结构,您可以查询数据库以仅获取美国境内的客户。这可以在usClients节点上附加侦听器并在DataSnapshot对象上进行迭代。

这种做法称为非规范化,是Firebase的常见做法。为了更好地理解,我重新命令您看到此视频,Denormalization is normal with the Firebase Database