2017-04-03 25 views
0

我的数据库如下所示:indexOn如何在firebase-database中工作?

"users": { 
    "2387653478": { 
     "score": 1000, 
     ... 
    }, 
    "8456756547": { 
     "score": 2000, 
     ... 
    }, 
    ... 
} 

我想做一个简单的排名由“分数”,但我有很多的用户,我应该在规则中增加一个indexOn优化排序:

"rules": { 
    "users": { 
     "$user": { 
      ".read": "auth != null", 
      ".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user", 
      ".indexOn": ["score"] 
     } 
    } 
} 

仅当在规则中添加indexOn时,优化功能是否具有100%的功能? 在添加indexOn之前创建的用户呢?

在此先感谢!

回答

0

当您更新规则文件(通过Firebase Database console或通过CLI)时,Firebase数据库(重新)将创建规则中定义的所有索引。它为所有现有数据执行此操作,然后继续更新这些索引以进行任何数据更改。

但是你已经定义了错误级别的索引。您希望允许查询单个用户的分数上的users节点。所以,你必须定义在users指数:

"rules": { 
    "users": { 
     ".read": "auth != null", 
     ".indexOn": ["score"] 
     "$user": { 
      ".write": "auth != null && auth.token.firebase.identities['facebook.com'][0] === $user", 
     } 
    } 
} 

你会发现,我也动了你的.read规则高达users。因为如果没有这个功能,您将无法读取/users的权限,因此无法查询。

+0

感谢您的快速回复! “娱乐”过程将需要几秒钟的时间。如果数据库在那时收到用户修改请求,会不会有问题? –

+0

如果您遇到问题,请提供重现这些问题的步骤。 –

+0

我要求防止当前用户出现问题。目前没有问题。谢谢! –