2017-02-21 21 views
1

У меня возникают проблемы с индексацией данных с помощью правил базы данных firebase.Firebase indexOn правила в уникальных ключах

Мои данные следующим образом:

entities 
$entity_id 
    users 
    $user_id : true 

Мой firebase запрос 3.x выглядит следующим образом:

firebase.database().ref('entities') 
    .orderByChild('users/' + user.uid) 
    .equalTo(true) 
    .once('value') 

Мои правила таковы:

{ 
    "entities": { 
    "users": { 
     "$userId": { 
     ".indexOn": ".value" 
     } 
    } 
    } 
} 

Но все-таки я Получая это:

FIREBASE WARNING: 
Using an unspecified index. 
Consider adding ".indexOn": "users/VShAzNsxGjOIIlcrrZsWCxuMuuH2" 
at /entities to your security rules for better performance 

Я пробовал:

Firebase Security Rules: .indexOn unique ids

и

Firebase .indexOn dynamic keys

Спасибо за вашу помощь

ответ

0

Решение это просто лучше NoSQL схемы.

Этот запрос будет пытаться отфильтровать все сущности и проверить, найден ли userId.

В действительности вы должны иметь ссылку, как userEntities, которая будет включать в себя все ключи сущностей, которые этот пользователь является частью - и этими ключами извлекают эти объекты пользователей.

Одна вещь, которую вы должны отметить, создание базы данных для firebase - это правила безопасности. Правила безопасности в конечном итоге решают, может ли этот тип запросов быть приемлемым на стороне клиента. Пример:..

firebase.database() ссылок ('объекты') orderByChild ('пользователей /' + user.uid)

призыв к корню 'субъекты', не индивидуально к объектам/пользователям/userId. Так что, если вы хотите отключить чтение для всех других объектов, но ваш собственный вы должны попытаться получить доступ к

.ref («лица»). Ребенка (EntityId)

Это вещь не выделена достаточно в любом месте.

Реляционные базы данных выигрывают этот IMO.

0

.indexOn должны быть расположены параллельно с динамическим ключом, как это:

{ "entities": { "users": { ".indexOn": ".value", } } }