为啥这个 Firebase“.indexOn”不起作用?

Posted

技术标签:

【中文标题】为啥这个 Firebase“.indexOn”不起作用?【英文标题】:Why does this Firebase ".indexOn" not work?为什么这个 Firebase“.indexOn”不起作用? 【发布时间】:2015-12-27 21:18:47 【问题描述】:

所以我有这样的数据:

pushNotifications 
    -K - RwEgd541PIGNOXXUH: 
        message: "Xiaoyu Hugh Hou bid at $900 on your task: New P..."
        notifyId: "facebook:10100683829966199"
        relatedTask: "-Jzl8XKaxGCv19nIOChm"
        timestamp: 1443594566599
     - K - RwpcBlQa04VJT4Bwm: 
        message: "Sam Feldt bid at $1100 on your task: New Post g..."
        notifyId: "google:1043268349966197"
        relatedTask: "-Jzl8XKaxGCv19nIOChm"
        timestamp: 1443594721963
     - K - RwuM3 - 0 G0q9I96WHg: 
        message: "Sam Feldt bid at $600 on your task: NO Firebase..."
        notifyId: "facebook:10100683829966199"
        relatedTask: "-JzTSk2TIlO46oVqJ1Nn"
        timestamp: 1443594741347
    

在我的代码中,我需要获取下面某个“notifyId”的最新通知。代码如下:

ref.child('pushNotifications')
   .orderByChild("notifyId")
   .limitToLast(1)
   .on("child_added", function (snapshot) 
       console.log("Found a new notification...");
       sendPush(snapshot.val());
   );

在我的 firebase 安全规则中,我有这个索引规则:

 "pushNotifications": 
      ".read": "auth != null",
      ".write": "auth != null",
      "$pushId": 
        ".indexOn": ["notifyId", "timestamp"],
      
    ,

这里是 Firebase 文档所遵循的索引结构:docs

但是当我运行代码时,控制台仍然有日志

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

这没有任何意义,因为我已经这样做了。请帮忙!

【问题讨论】:

顺便说一句,同样的话题在不到一天前在这里得到了解决:***.com/questions/32849805/… 【参考方案1】:

您需要将.indexOn 比您所做的高一级:

 "pushNotifications": 
    ".read": "auth != null",
    ".write": "auth != null",
    ".indexOn": ["notifyId", "timestamp"]
,

为了比较,请始终查看Firebase documentation on indexes,它使用了这个 JSON 示例:

"dinosaurs": 
  "lambeosaurus": 
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  ,
  "stegosaurus": 
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  

使用此索引规则:


  "rules": 
    "dinosaurs": 
      ".indexOn": ["height", "length"]
    
  

【讨论】:

以上是关于为啥这个 Firebase“.indexOn”不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用auth.uid变量在firebase上设置indexOn规则?

在 Firebase 中使用带有嵌套键的 .indexOn

在 Firebase 规则中添加和 ".indexOn": ".value"

.indexOn 如何与用户和唯一键一起使用?

为啥我向主题发送 Firebase 通知的请求不起作用(HTTP POST)?

"error": "索引未定义,添加 ".indexOn"