如何有条件地从 Firebase 实时数据库读取数据

How to read data from Firebase Realtime Database conditionally

假设我的 Firebase 实时数据库中有以下结构:

- users
  - g123
    - john
      - age: 30
      - active: 1
    - mike
      - age: 20
      - active: 0
    - johanna
      - age: 30
      - active: 1
  - g456
    - jake
      - age: 20
      - active: 1
    - maria
      - age: 20
      - active: 0
  - g789
    - elli
      - age: 20
      - active: 0
    - joe
      - age: 20
      - active: 0

我需要获取 child:s 的列表,其中至少有 1 个用户 active 设置为 1

因此,在上面的示例中,g123 中有 2 个活跃用户,g456 中有 1 个活跃用户。 g789.

没有活跃用户

我如何构建对 Firebase 实时数据库的查询(最好使用 Python),它将 return g123g456?

Firebase 实时数据库查询在平面节点列表上工作,order/filter 上的值必须位于每个直接子节点下的固定路径中。所以你想要的那种查询,在这个数据结构上是不可能的。

一个常见的解决方法是将 activeCount 存储在每个直接子节点下,并在每次写入时更新它。

- users
  - g123
    activeCount: 3
    - john
      - age: 30
      - active: 1
    - mike
      - age: 20
      - active: 0
    - johanna
      - age: 30
      - active: 1
  - g456
    activeCount: 0
    - jake
      - age: 20
      - active: 1
    - maria
      - age: 20
      - active: 0
  - g789
    activeCount: 3
    - elli
      - age: 20
      - active: 0
    - joe
      - age: 20
      - active: 0

然后您可以 order/filter 在此 activeCount

另见:

  • Firebase Query Double Nested