【问题标题】:Using .indexOn with nested keys in Firebase在 Firebase 中使用带有嵌套键的 .indexOn
【发布时间】:2014-11-27 21:48:07
【问题描述】:

我有一堆要使用.indexOn索引的键

假设我的数据如下所示。我希望能够使用.orderByChild("height")

{
  "lambeosaurus": {
    "stats": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "stats": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

我如何指定索引height 的规则,它是stats 的子级?我是否必须重组或扁平化我的数据?

【问题讨论】:

  • 据我所知,这种更深层次(或多值)的索引(还)是不可能的。我们在这里谈到了类似的事情 (stackoverflow.com/questions/26910242/…),我还没有看到 Firebaser 的任何回应说它可能的;我无法让重要的(即多值)键正常工作。因此,目前看来您必须为这些创建自己的索引,如我链接到的答案中所述。

标签: json firebase


【解决方案1】:

现在可以任意深度查询和索引。

{
  "rules": {
    "$dinosaur": {
      ".indexOn": ["stats/height"]
    }   
  }
}

并查询嵌套值:

.orderByChild('stats/height')

【讨论】:

  • 我收到错误消息。未捕获的错误:Query.orderByValue 失败:使用 1 个参数调用。预计没有。(…)
  • @akshay try .orderByChild('stats/height')
【解决方案2】:

2015/12/17 更新:Firebase 现在支持深度索引,请参阅 Tom 的回答。


您可以在数据树中任意嵌套索引规则,但一次只能查询一个元素列表的属性 - 不是任意深度。以下是一些示例规则,用于索引高度:

{
  "rules": {
    "$dinosaur": {
      "stats": {
        ".indexOn": ["height"]
      }
    }   
  }
}

【讨论】:

  • 那么我该如何查询呢?我尝试使用以下内容设置查询,但没有返回任何内容。谢谢你的帮助。 var fb = new Firebase("https://a_fb_ur./dinosaur");fbQuery = fb.orderByChild("height").equalTo(4);
  • 您必须展平您的数据才能执行该查询,然后您需要附加一个侦听器来检索数据。即new Firebase(...).child('dinosaurs').orderByChild('height').on('child_added', function(snapshot) { ... }).
  • 好的;对于存储GeoJSON,我可能想要展平数据,然后因为我通常想要索引和搜索存储在嵌套“属性”键中的键。感谢您的确认。
  • 完整查询是new Firebase(...).child('dinosaurs').orderByChild('height').equalTo(4).on(...)
  • 无论如何,Firebase 文档没有给出应用于索引的通配符节点的示例,因为它应用于安全规则,它也适用于索引是合乎逻辑的。感谢您的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2017-01-07
  • 2017-07-11
  • 2020-08-03
  • 1970-01-01
  • 2017-05-28
相关资源
最近更新 更多