Индекс должен быть определен в месте, где вы выполняете запрос. Таким образом, поскольку вы выполняете запрос на /Users
, именно здесь нужно определить индекс. Как говорится в сообщении об ошибке:
{
"rules": {
".read": true,
".write": true,
"users": {
".indexOn": "mailboxes/445566/status"
}
}
}
Но вы сразу заметите, что это означает, что вам понадобится индекс для каждого UID, что невозможно. Причина этого в том, что база данных Firebase может запрашивать только плоские списки, она не может выполнять запросы на нескольких уровнях.
Ваша текущая структура данных позволяет вам эффективно читать все почтовые ящики для данного пользователя. Однако он не позволяет легко найти всех пользователей с определенным статусом почтового ящика. Чтобы разрешить последнее, вам понадобится дополнительная структура данных, в которой вы храните список почтовых ящиков (сущность, к которой вы обращаетесь), их статус (условие, по которому вы фильтруете) и их пользователя (желаемый результат). .
mailboxes: {
"445566": {
"Status": "Active",
"user": "uid1"
},
"112233" {
"Status": "Active",
"user": "uid2"
}
}
С указанной выше дополнительной структурой вы можете использовать этот индекс:
"mailboxes": {
".indexOn": "Status"
}
Затем вы запрашиваете этот /mailboxes
, чтобы получить все почтовые ящики с определенным статусом, а затем определяете уникальных пользователей, которые будут отображаться там.
Также см .: