Как работает indexOn в базе данных firebase?

Моя база данных выглядит следующим образом:

"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"]
        }
    }
}

Является ли оптимизация 100% функциональной только при добавлении indexOn в правилах? А как насчет пользователей, созданных до добавления indexOn?

Заранее спасибо!

1 ответ

Когда вы обновляете свой файл правил (либо через консоль базы данных Firebase, либо через 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 и, следовательно, не может запросить его.

Другие вопросы по тегам