Вы пытаетесь объединить несколько orderBy
, что запрещено в Firebase. Это связано с тем, что слишком большое количество запросов отрицательно влияет на производительность, и Firebase хочет заставить вас оптимизировать структуру данных.
Так что есть несколько вариантов для вас отсюда. Прочтите этот пост, чтобы увидеть возможности базы данных в реальном времени: Запрос на основе нескольких предложений where в Firebase
Я бы порекомендовал вам один из этих двух подходов.
1. Используйте новый Cloud Firestore
Firebase недавно запустила свой новый Cloud Firestore, который в основном базируется на document
. Это значительно упрощает структурирование ваших данных, и вы получаете возможность связывать queries
без ущерба для производительности. Здесь вы можете узнать больше: https://firebase.google.com/docs/firestore/use-rest-api
и это еще один полезный дополнительный ресурс о том, как структурировать query
:
Начальный запрос API REST Firestore
2. Перестройте свою базу данных
Если вы решите реструктурировать свою базу данных, я бы порекомендовал вам одну из следующих структур.
Добавить статус узла:
{
"pending": {
"user1" : {
"Name" : "John Doe",
"Liked" : "Y"
},
},
"done": {
"user2" : {
"Name" : "Jane Doe",
"Liked" : "Y"
}
}
}
и теперь просто измените ваш запрос следующим:
https://firebase.com/pending.json?orderBy="Liked"&equalTo="Y"
или в качестве второго варианта вы можете сделать нас из комбинированного свойства, подобного этому:
{
"user1" : {
"Name" : "John Doe",
"acctStatus" : "Pending",
"Liked" : "Y",
"queryProp" : "Pending-Y"
},
"user2" : {
"Name" : "Jane Doe",
"acctStatus" : "Done",
"Liked" : "Y",
"queryProp" : "Done-Y"
}
}
, а затем просто закажите по queryProp
:
https://firebase.com/user.json?orderBy="queryProp"&equalTo="Pending-Y"
Объединенное свойство легче поддерживать, поскольку вам не нужно перемещать данные при изменении status
. Но имейте в виду, что вы всегда будете получать queryProp
как часть ваших результатов.