首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >firebase实时数据库查询以查找数据

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

Stack Overflow用户
提问于 2020-10-12 13:20:26
回答 2查看 214关注 0票数 5

我希望存储一些儿童活动的数据,其中每个活动都适合特定的年龄范围。比方说A幕适合2-5岁的孩子。B幕适合0 -1岁的儿童。

在客户端,有一组固定的选择,比如:0-1年,1-3年,4-5年,6-13年

现在的要求是活动A应该出现在选择1-3以及4-5年,因为2 -5重叠这两个范围。

存储活动数据并有效地查询它的好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-26 23:00:47

@侯赛因作为你的想法的灵感来源,我对它进行了一些简化,以适应我的用例。实际上,我在活动中添加了每个年龄组的分类,而不是单独的节点,如下所示:

婴儿:真实的青少年:真实的

诸若此类。

这节省了维护和更新整个节点的开销,并且随着活动的增加而增加了复杂性

票数 0
EN

Stack Overflow用户

发布于 2020-10-19 07:53:28

假设固定的选择集是您的应用程序的永久特性,我将为每个匹配设置一个布尔值字段,例如,您的活动将如下所示:

代码语言:javascript
复制
activities: {
  activityA: {
    range0to1: false,
    range2to3: true,
    range4to5: true,
    range6to13: false
  },
  activityB: {
    range0to1: true,
    range2to3: false,
    range4to5: false,
    range6to13: false
  }
}

然后当你想查询所有申请的活动时,例如。2到3岁,那么你就已经有了要查询的字段,不需要太复杂的东西。

但实际上,为了长寿,我不会假设固定的选择集在应用程序的生命周期内是永久的,在这种情况下,我宁愿这样:

代码语言:javascript
复制
activities: {
  activityA: {
    minAge: 2,
    maxAge: 5,
  },
  activityB: {
    minAge: 0,
    maxAge: 1,
  }
}

然后,如果我想查询x和y之间的固定年龄选择,我的理想查询应该是minAge或maxAge在x和y之间的所有活动(因此在范围内有重叠)。

eg (伪代码) where ((minAge > x and minAge < y) or (maxAge > x or maxAge < y))

但不幸的是,在实践中,firebase RTDB不允许您按多个字段进行查询,因此,如果还不算太晚,我建议使用Firestore,它可能更适合您的需求(我个人认为,对于大多数用例,我通常会推荐firestore而不是RTDB )。

如果你坚持使用RTDB,那么另一个解决方案可能是在你的结构的根上创建一个查找块:

代码语言:javascript
复制
{
  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并获得活动列表。如果你正在寻找一个年龄范围,这将意味着多个查询,并且确实意味着必须确保你的查找块保持同步。如果您的应用程序数据结构的其余部分不太复杂,这应该是可以的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64312088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档