在Firebase实时数据库中的多个节点上搜索

时间:2018-07-10 20:25:17

标签: javascript firebase firebase-realtime-database firebase-security-rules

我正在尝试为汽车,自行车等不同类别创建搜索框 这是我的数据库结构enter image description here

我编写的用于检索数据的代码

        function AllDataSearch(searchBoxInput) {
      firebase.database().ref('motorcycle').startAt(searchBoxInput).on('child_added', function (snapshot) {
        showData(snapshot.val());
        console.log("All Data Search1:", snapshot.val(),showData(snapshot.val()));
      });
      firebase.database().ref('cars').startAt(searchBoxInput).orderByChild('title').on('child_added', function (snapshot) {
        console.log("All Data Search2:", snapshot.val());
      });
      firebase.database().ref('electricappliances').startAt(searchBoxInput).orderByChild('title').on('child_added', function (snapshot) {
        console.log("All Data Search3:", snapshot.val());
      });
      firebase.database().ref('mobiles').startAt(searchBoxInput).orderByChild('title').on('child_added', function (snapshot) {
        console.log("All Data Search4:", snapshot.val());
      });
    }

但是当我尝试运行此代码时,出现以下错误

  

[2018-07-10T20:01:19.574Z] @ firebase /数据库:FIREBASE警告:使用未指定的索引。您的数据将在客户端上下载并过滤。考虑在/ all处为您的安全规则添加“ .indexOn”:“ title”,以获得更好的性能。

由于错误提示,我还在firebase数据库的规则部分中添加了“。indexOn” ,请参见下图。

enter image description here

但该错误不会消失,是否还有其他方法可以在Firebase数据库中的多个节点之间进行搜索或删除此错误。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

警告提示您应为/all添加索引。您的规则中没有/all。由于您共享的代码不会查询/all,因此您似乎在查询中的另一个位置查询了该节点。解决方案是也为/all添加标题索引,所以:

{
  "rules": {
    ...,
    "all": {
      ".indexOn": "title"
    }
  }
}