我一直在控制台上获取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"]
}
}
}
}
我不确定为什么索引不起作用。我如何改进整个数据库的索引?
答案 0 :(得分:6)
您当前的数据结构只允许轻松列出聊天室的所有成员,而不是相反。这可能是您收到该消息的原因,因为如果您要列出用户所属的所有聊天记录,则必须搜索所有/chats
条记录。
您可能需要在/chat/<chat-id>/members
和/users/<uid>/groups
复制聊天室成员资格数据。你的案例几乎与the Firebase guide here中的案例相同 - 特别是阅读链接部分中的代码,但最好阅读整个指南,这真的有助于我理解数据库是如何工作的。
顺便说一句:您的聊天规则:".indexOn": ["uid"]
对您发布的示例数据不做任何处理。它说“按uid
属性索引聊天室”,但您的聊天室内没有uid
键(表示uid: 'someid'
,而不是'someid': true
)。有关索引如何工作的详细信息,请参阅indexing guide。
答案 1 :(得分:1)
有两种类型的索引orderByValue:
和orderByChild
使用orderByValue建立索引:
{
"rules": {
"scores": {
".indexOn": ".value"
}
}
}
使用orderByChild进行索引:
{
"rules": {
"employee": {
".indexOn": ["empName", "empId", "designation"]
}
}
}
多级索引:
{
"rules": {
"employee": {
".indexOn": ["empName","empId","branchDetails/branch",
"branchDetails/branchLocation","branchDetails/branchId"]
}
}
}
对于Firebase实时数据库数据索引,您也可以参考此链接。