适当的查询结构。没有得到日志输出

时间:2015-12-19 14:36:39

标签: javascript firebase firebase-security

我试图在firebase上对我上传的一些测试数据做一个简单的equalTo()。这是代码。

var ref = new Firebase("https://crackling-fire-1105.firebaseio.com/business");
ref.orderByChild("city").equalTo("Pétion-Ville").on("child_added", function(snapshot) {
  console.log(snapshot.key());
});

我在控制台里什么也没得到。

如果我在我自己的代码旁边使用firebase doc代码,那么它就可以运行。https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

    var ref = new Firebase("https://dinosaur-facts.firebaseio.com/dinosaurs");
ref.orderByChild("height").equalTo(25).on("child_added", function(snapshot) {
  console.log(snapshot.key());
});

Index.on我正在收到错误。 (这已在下面的评论中得到解决)

  

FIREBASE警告:使用未指定的索引。考虑在/ business中添加“.indexOn”:“city”到您的安全规则以获得更好的性能

第一次获得它后,我添加了.indexOn:“city”。我仍然收到这个错误,我在控制台中什么也没得到。

这些是安全和规则控制台中的规则。

{
    "rules": {
        ".read": true,
        ".write": true,
        ".indexOn": "city"
    }
}

json结构如下:

{
 business {
     Joe's Designs: { 
                 "accountid"
                 "address"
                 "city"
                 "email"
                 "heading"
                 "headingid"
                 "objectId"
                 "phonenumber1"
                 "website"
                 }

            }
}

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:3)

在您需要索引的键下方指定.indexOn

{
   "rules": {
     "business": {
        ".indexOn": "\"city\""
     }
   }
}

这使您可以为任何顶级密钥设置.indexOn规则。

通过查看您的数据,您似乎正在逃避密钥。我不确定你为什么这样做,但这需要你使用转义值进行索引和查询。

JSBin demo

var ref = new Firebase("https://crackling-fire-1105.firebaseio.com/business");
ref.orderByChild("\"city\"").equalTo("Pétion-Ville").on("child_added", function(snapshot) {
  console.log(snapshot.val());
});