在特定子节点周围加载相邻子节点的最佳策略是什么?最好是使用一个查询

What's the best strategy to load the neighbor children around a specific child, preferably with one query?

本文关键字:子节点 查询 一个 是什么 加载 周围 策略 最佳      更新时间:2023-09-26

如果我们有以下对象:

{
  "child01": {
    "rating": 1
  },
  "child02": {
    "rating": 2
  },
  "child03": {
    "rating": 3
  },
  "child04": {
    "rating": 4
  },
  "child05": {
    "rating": 5
  },
  "child06": {
    "rating": 6
  },
  "child07": {
    "rating": 7
  }
}

目标是获取特定子节点的前2个和后2个子节点,例如,评分为4的子节点,最好使用一个查询。

期望的结果是:

child02
child03
child04 (The child of interest)
child05
child06

我的第一个猜测是使用:

ref.orderByChild('rating').equalTo(4).limitToFirst(3).limitToLast(4)

但是似乎我们不能同时使用这两个限制

是否有办法在我监督的一个请求中查询这个?

如果不是,实现这一目标的最佳策略是什么?

谢谢

假设你有完整的JSON:

{
  "child01": {
    "rating": 1
  },
  "child02": {
    "rating": 3
  },
  "child03": {
    "rating": 3
  },
  "child04": {
    "rating": 3
  },
  "child05": {
    "rating": 5
  },
  "child06": {
    "rating": 3
  },
  "child07": {
    "rating": 7
  }
}

如果您想要前三个等级等于3的子代,您需要查询:

ref.orderByChild('rating').equalTo(3).limitToFirst(3)

child02

child03

child04

如果您想要相同的,但从child3开始:

ref.orderByChild('rating').startAt(3, 'child03').limitToFirst(3)

child03

child04

child06

如果您想要child3之后的三个兄弟姐妹,您可以简单地执行:

ref.orderByKey().startAt('child03').limitToFirst(3)

child03

child04

child05

工作代码请参见http://jsbin.com/noziri/edit?js,console