如何为Firebase数据库添加索引规则?

Soh*_*eil 4 firebase firebase-realtime-database

我一直在控制台上获取firebase消息,以便在聊天规则中为用户4321添加indexOn.下面是我的数据库.

在此输入图像描述

而我在firebase中的规则如下:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "users": {
      ".indexOn": ["name", "email","uid"],
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    },
    "chats": {
      "$key": {
        ".indexOn": ["uid"] 
      }
    }
   }
}
Run Code Online (Sandbox Code Playgroud)

我不确定为什么索引不起作用.如何改进整个数据库的索引?

que*_*zak 6

您当前的数据结构只允许轻松列出聊天室的所有成员,而不是相反.这可能是您收到该消息的原因,因为如果您要列出用户所属的所有聊天,您必须搜索所有/chats记录.

您可能需要在/chat/<chat-id>/members和处复制聊天室成员资格数据/users/<uid>/groups.您的案例几乎与Firebase指南案例完全相同- 请特别阅读链接部分中的代码,但最好阅读整篇指南,这真的有助于我了解数据库的工作原理.

顺便说一句:您在聊天中的规则:".indexOn": ["uid"]对您发布的样本数据不做任何处理.它说"按其uid属性索引聊天室",但你的聊天室uid里面没有密钥(意思是uid: 'someid',没有'someid': true).有关索引如何工作的详细信息,请参阅索引指南.