用于更好查询的 Firebase 数据库结构

Firebase Database Structure For Better Queries

我正在开发一款应用程序,帮助用户在附近的药店搜索他们想要的药物,然后显示有库存药品的药店列表和价格。

我有 SQL 背景,一直很难决定如何构建 Firestore 数据库以实现更好的查询,我认为通常您会浏览药店列表及其数据库,但是有没有如何为所有药物创建一个单一数据库,其中可能包含一个字段,该字段包含在 Firestore 中有库存的药房的主键?

有两种方法可以解决这个问题。第一个是在每个药房下创建一个子集合来保存所有可用药物:

Firestore-root
  |
  --- pharmacies (collection)
        |
        --- $pharmacyId (document)
               |
               --- drugs (sub-collection)
                     |
                     --- $drugId
                           |
                           --- name: "Aspirin"
                           |
                           --- inStock: true

要获得所有有库存的药房,例如,需要 collection group query。在 Android 中,查询应如下所示:

db.collectionGroup("drugs").whereEqualTo("name", "Aspirin").whereEqualTo("inStock", "true");

您的第二个选择是创建单个顶级药物集合:

Firestore-root
  |
  --- drugs (collection)
        |
        --- $drugId (document)
              |
              --- name: "Aspirin"
              |
              --- inStock: true
              |
              --- pharmacyId: $pharmacyId

并创建一个如下所示的简单查询:

db.collection("drugs").whereEqualTo("name", "Aspirin").whereEqualTo("inStock", "true");

所以您可以根据您的应用程序的用例选择工作或其中之一。