2016-08-23 3 views
3

Я продолжаю получать сообщения firebase на консоли относительно добавления indexOn для пользователя 4321 в правилах чата. Ниже приведена моя база данных.Как добавить правила индекса для базы данных Firebase?

enter image description here

И мои правила в firebase, как:

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    "users": { 
     ".indexOn": ["name", "email","uid"], 
     "$uid": { 
     ".write": "$uid === auth.uid" 
     } 
    }, 
    "chats": { 
     "$key": { 
     ".indexOn": ["uid"] 
     } 
    } 
    } 
} 

Я не уверен, почему индексация не работает. И как я могу улучшить индексирование для общей базы данных?

+0

Вы включили изображение вашего дерева JSON в свой вопрос. Пожалуйста, замените это на фактический JSON как текст, который вы легко можете получить, нажав кнопку «Экспорт» в консоли базы данных Firebase. Наличие JSON в качестве текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь. –

+0

Привет, немного несвязанный вопрос. Я имею дело с подобной структурой, и я хочу запросить чаты конкретного пользователя. Это должно быть 'chats/CHAT_ID/USER_ID', но поскольку у меня нет CHAT_ID, я не знаю, как с этим справиться. Вы столкнулись с подобной проблемой? – WedgeSparda

ответ

4

Ваша текущая структура данных позволяет легко перечислить всех участников чата, а не наоборот. Возможно, это причина, по которой вы получаете это сообщение, потому что, если вы хотите перечислить все чаты, к которым принадлежит пользователь, вам необходимо выполнить поиск по всем /chats записям.

Возможно, вам необходимо дублировать данные о членстве в чате как на /chat/<chat-id>/members, так и на /users/<uid>/groups. Ваше дело почти идентично тому, которое было в the Firebase guide here - прочитайте, в частности, описание ниже кода в разделе, связанном, но лучше всего прочитать руководство, это действительно помогло мне понять, как работает база данных.

КТ: ваше правило в чатах: ".indexOn": ["uid"] ничего не делает с данными, которые вы отправили. В нем говорится, что «проиндексировать чаты с помощью их атрибута uid», но ваши чаты не имеют ключа uid (значение uid: 'someid', а не 'someid': true). См. indexing guide о том, как работает индексация.

Смежные вопросы