indexOn如何在firebase-database中工作?

时间:2017-04-03 12:31:32

标签: firebase firebase-realtime-database firebase-security

我的数据库如下所示:

"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之前创建的用户呢?

提前致谢!

1 个答案:

答案 0 :(得分:1)

更新规则文件(通过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的读取权限,因此无法查询它。