【问题标题】:How do I use equalsTo() in Firebase?如何在 Firebase 中使用 equalsTo()?
【发布时间】:2016-10-06 04:13:44
【问题描述】:

我有一个数据库结构:

newsfeed-21f5c

 newsfeed3:9:2016:18:1:39
   text: "5"
   time: "3:9:2016:18:1:39"
   timeStampFirebase: 1475661721607
 newsfeed4:9:2016:11:16:10
   number: 7
   time: "4:9:2016:11:16:10"
   timeStampFirebase: 1475723771672

我尝试运行:

var search = firebase.database().ref("newsfeed");
  search.orderByChild("number").equalTo(7).on("child_added", function(snapshot) {
    console.log(snapshot.key);
  });

我不断收到 Firebase 警告。

FIREBASE 警告:使用未指定的索引。考虑将 /newsfeed 中的 ".indexOn": "number" 添加到您的安全规则中以获得更好的性能

我想要实现的是使用等于7 的数字键搜索newsfeeds

我对 Firebase 还很陌生,因此我们将不胜感激。

【问题讨论】:

  • 警告说什么?
  • FIREBASE 警告:使用未指定的索引。考虑将 /newsfeed 中的 ".indexOn": "number" 添加到您的安全规则中以获得更好的性能
  • 不确定是什么意思。但我使用了与文档中示例相同的方法

标签: javascript firebase firebase-realtime-database


【解决方案1】:

你收到的消息,

FIREBASE WARNING: Using an unspecified index. Consider adding ".indexOn": "number" at /newsfeed to your security rules for better performance

不是错误。您的代码应该可以工作。 Firebase 支持索引,这可以大大提高像这样的搜索速度。您看到的警告是 Firebase 要求您配置索引以获得更好的性能。

怎么做:

转到您的 Firebase 控制台。

查看数据库 -> 规则(选项卡之一)。

您可以在此处设置 JSON 格式的权限规则和索引。将这个 JSON 复制粘贴到那里:

{
  "rules": {
    "newsfeed": {
      ".indexOn": ["number"]
    }
  }
}

PS:使用snapshot.getKey()获取firebase密钥。

【讨论】:

  • 像这样:{ "rules": { ".read": "auth != null", ".write": "auth != null" "newsfeed": { ".indexOn": [“数字”] } } }
  • 如何将其添加到我现有的规则中?
  • 是的,就像那样。但是,您在“新闻源”之前缺少一个逗号。
  • 知道了,我不再收到警告了,但是当我控制台记录 snapshot.key 时似乎什么都没有出现,
  • 使用snapshot.getKey()
【解决方案2】:

警告是说您应该在number 字段上定义一个索引,因为您正在通过该字段进行查询。基本上,如果您提前告诉 Firebase 您要查询什么,他们可以在内部管理您的数据,以便通过创建索引来更好地支持该查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2017-07-19
    • 1970-01-01
    • 2017-02-25
    • 2016-09-27
    • 2021-12-12
    • 2021-08-10
    • 2020-07-26
    相关资源
    最近更新 更多