首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >indexOn在firebase数据库中是如何工作的?

indexOn在firebase数据库中是如何工作的?
EN

Stack Overflow用户
提问于 2017-04-03 20:31:32
回答 1查看 2.6K关注 0票数 0

我的数据库如下所示:

代码语言:javascript
复制
"users": {
    "2387653478": {
        "score": 1000,
        ...
    },
    "8456756547": {
        "score": 2000,
        ...
    },
    ...
}

我想按"score“做一个简单的排名排序,但我有很多用户,我应该在规则中添加一个indexOn来优化:

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

当在规则中添加indexOn时,优化是否100%起作用?在添加indexOn之前创建的用户怎么办?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-04-03 22:02:55

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

但是您在错误的级别上定义了索引。您希望允许在users节点上查询单个用户的分数。因此,您必须在users上定义索引

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

您会注意到,我还将您的.read规则上移到了users。因为如果没有它,您就不会拥有对/users的读取权限,因此无法对其进行查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43184773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档