Предполагая, что я получил следующий простой запрос с , где и orderBy и limit , который вернет мне публичный профиль (следовательно, где ), который был недавно обновлен (следовательно, orderBy ).
db.collection('profile')
.where('public_profile', '==', true)
.orderBy('updated_at', 'desc')
.limit(1)
.onSnapshot(function(doc) {
...
});
Теперь я хочу добавить дополнительную логику, означающую, что я хочу отображать только те профили, которые находятся ниже какого-то уровня. Когда я делаю следующее:
db.collection('profile')
.where('public_profile', '==', true)
.orderBy('updated_at', 'desc')
.where('level', '<=', 5)
.limit(1)
.onSnapshot(function(doc) {
...
});
Я получаю ошибку:
Неверный запрос. У вас есть фильтр where с неравенством (lessThan,
lessThanOrEqual, moreThan или moreThanOrEqual) в поле
«talent.level», и поэтому вы должны также использовать «уровень» в качестве первого
поле queryOrderedBy, но ваш первый queryOrderedBy в данный момент включен
вместо поля 'updated_at'.
Как я понимаю, мне нужно добавить дополнительный orderBy , давая мне следующее:
db.collection('profile')
.where('public_profile', '==', true)
.where('level', '<=', 5)
.orderBy('level', 'desc')
.orderBy('updated_at', 'desc')
.limit(1)
.onSnapshot(function(doc) {
...
});
Однако это приводит к неверному результату: он не возвращает последний обновленный общедоступный профиль, уровень которого ниже или равен 5. Он возвращает мне самый последний обновленный общедоступный профиль профиля с самый высокий уровень.
Кто-нибудь из вас нашел подобную проблему? Если да, каково было ваше решение?