【问题标题】:How to create an index on a child property of an array object in Firebase如何在 Firebase 中的数组对象的子属性上创建索引
【发布时间】:2015-11-06 18:48:44
【问题描述】:

在我的 firebase 应用程序中,我使用生成唯一 ID 的 push() 方法将对象存储在数组结构中。这些对象有一个名为“scheduledDate”的子属性我如何在firebase中创建一个indexOn规则来索引这个字段。在事件下,每个用户都有一个节点,而不是他们事件的子数组。 /events/userId/arrayOfEvents

我可以使用 orderByChild() 成功地按事件预定日期检索记录,但它警告我有关索引。

我的规则如下所示:

   "events":{
      ".read" : "auth != null",
      ".write" : "auth != null",
      ".indexOn": ["scheduledDate"]
    } 

我的查询代码如下所示:

         this.dbEvents = new Firebase(firebaseEventsUrl);

         var q;

         q = this.dbEvents.child(userId).orderByChild("scheduledDate").limitToLast(limitToLast);

         return $firebaseArray(q);

我的数据如下所示:

          events:{
              user1:{
                  -K2NYCT2_uMwsTSfH58O(push generated):{
                      description: 'event 1',
                      scheduledDate: 1446730200000
                  },
                  --K2NyNh660I4k8loar-z:{
                      description: 'event 2',
                      scheduledDate: 1446730200000
                  },
              },
              user2:{

              }
          }

【问题讨论】:

  • 数据或代码描述与实际数据/代码不同。请显示您的数据示例(请不要截图)和您用来查询它的代码。
  • 已编辑以显示我正在使用的代码和数据结构。再次,它有效,只是警告我需要为 scheduleDate 编制索引,但我不知道如何为这么深的级别创建 indexOn 规则。

标签: firebase


【解决方案1】:

这应该可行:

{
  "rules": {
    "events":{
      ".read" : "auth != null",
      ".write" : "auth != null",
      "$uid": {
        ".indexOn": "scheduledDate"
      }
    } 
  }
}

【讨论】:

  • 我明白了:FIREBASE 警告:使用未指定的索引。考虑将“.indexOn”:“scheduledDate” at /events/simplelogin:82 添加到您的安全规则中以获得更好的性能
  • 啊,我现在看到您在那里为用户设置了一个级别。我会更新的。
  • 这行得通,谢谢弗兰克!可以将“$uid”命名为任何变量来表示该级别吗?
  • 是的,它只是一个变量名。请阅读文档的这一部分:firebase.com/docs/security/guide/…
  • 有人能告诉我放置上述代码的最佳位置吗?
猜你喜欢
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2012-03-13
  • 2012-06-10
相关资源
最近更新 更多