在 Firebase 中使用带有嵌套键的 .indexOn
Posted
技术标签:
【中文标题】在 Firebase 中使用带有嵌套键的 .indexOn【英文标题】:Using .indexOn with nested keys in Firebase 【发布时间】: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
的子级?我是否必须重组或扁平化我的数据?
【问题讨论】:
据我所知,这种更深层次(或多值)的索引(还)是不可能的。我们在这里谈到了类似的事情 (***.com/questions/26910242/…),我还没有看到 Firebaser 的任何回应说它是可能的;我无法让重要的(即多值)键正常工作。因此,目前看来您必须为这些创建自己的索引,如我链接到的答案中所述。 【参考方案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 文档没有给出应用于索引的通配符节点的示例,因为它应用于安全规则,它也适用于索引是合乎逻辑的。感谢您的想法以上是关于在 Firebase 中使用带有嵌套键的 .indexOn的主要内容,如果未能解决你的问题,请参考以下文章