firebase 实时数据库查询以查找数据

标签 firebase firebase-realtime-database

我希望存储一些 child 事件的数据,其中每个事件都适合特定年龄范围。假设 A 幕适合 2 - 5 岁的 child 。行为 B 适合 0 -1 岁。
在客户端,有一组固定的选择,例如:
0 - 1 年,
13年,
4 - 5 年,
6 - 13 岁
现在的要求是事件 A 应该出现在选择 1 - 3 和 4 -5 年中,因为 2 - 5 与这两个范围重叠。
存储事件数据然后有效地查询它的好方法是什么?

最佳答案

假设固定的选择集是您的应用程序的永久功能,我将为每个匹配项设置一个 bool 字段,例如,您的事件将如下所示:

activities: {
  activityA: {
    range0to1: false,
    range2to3: true,
    range4to5: true,
    range6to13: false
  },
  activityB: {
    range0to1: true,
    range2to3: false,
    range4to5: false,
    range6to13: false
  }
}
然后当您要查询申请的所有事件时,例如。 2 到 3 岁,那么您已经有了可以查询的字段,无需太复杂。
但真的为了长寿,我不会假设固定的选择集在应用程序的生命周期中是永久的,在这种情况下,我宁愿有类似的东西:
activities: {
  activityA: {
    minAge: 2,
    maxAge: 5,
  },
  activityB: {
    minAge: 0,
    maxAge: 1,
  }
}
...然后,如果我想查询 x 和 y 之间的固定年龄选择,我理想的查询是针对 minAge 或 maxAge 在 x 和 y 之间的所有事件(因此范围重叠)
例如(伪代码)where ((minAge > x and minAge < y) or (maxAge > x or maxAge < y))但不幸的是,在实践中,firebase RTDB 不允许您按多个字段进行查询,因此如果还不算太晚,我建议您查看 Firestore,它可能更适合您的需求(我个人认为我通常会推荐 firestore大多数用例都在 RTDB 上)。
如果您坚持使用 RTDB,那么另一种解决方案可能是在结构的根部创建一个查找块:
{
  activities: {
    activityA: {
      // age range of 2-5 stored however you like
    },
    activityB: {
      // age range of 0-1 stored however you like
    },
    activityC: {
      // age range of 0-3 stored however you like
    }
  },
  ageActivityLookup: {
    age0: {
      activityB: true,
      activityC: true,
    },
    age1: {
      activityB: true,
      activityC: true,
    },
    age2: {
      activityA: true,
      activityC: true,
    },
    age3: {
      activityA: true,
      activityC: true,
    },
    age4: {
      activityA: true,
    },
    age5: {
      activityA: true,
    }
  }
}
因此,您可以简单地查询 ageX 并获取您的事件列表。如果您正在寻找一系列年龄,这将意味着多个查询,并且确实意味着必须确保您的查找块保持同步。如果应用程序数据结构的其余部分不太复杂,这应该没问题。

关于firebase 实时数据库查询以查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64312088/

相关文章:

android - 如何在 android firebase 中应用多个查询?

node.js - 当我的 Node.js 应用程序离线时,是否应该将 Firebase 数据库设置为离线?

typescript - 如何过滤 Observable 数组?

javascript - Firebase云函数生成推送ID

firebase - 我可以在 Firebase/Google Cloud Storage 存储桶上设置文件夹或存储桶级别 "cacheControl"设置吗?

java - 使用“Glide”时遇到问题

javascript - Firebase 身份验证谷歌提供商 invalid_request

ios - 如何将可选字典中的项目转换为单个字符串

ios - 如何安全地解包我从 Firebase 中的数据库调用的这个可选 URL?

javascript - 未定义不是状态数组中的对象,正在尝试查找状态数组长度