# #c# #firebase #unity3d #firebase-realtime-database
Вопрос:
"usersPost": { "post4543": { "userID": "X12", "text": "Hi" }, "post4544": { "userID": "X12", "text": "HELLO" }, "post454S4": { "userID": "X143", "text": "....." } }
равным Я хочу получать только сообщения какого-либо пользователя , скажем, «Идентификатор пользователя»: «X12»
В конце концов,limitToLast нет смысла загружать все снимки (у меня 1 млн сообщений), поэтому я ограничиваю свои загрузки только 5 результатами.И начните с последнего сохраненного ключа
Поэтому мой код таков
OrderByChild("userID").EndAt(lastSavedKey).EqualTo("X12").LimitToLast(5); //lastSavedKey is the post key "post4544"
Это работает в Windows, но не работает на Android, как я получаю:
Ошибка запроса firebase::equalTo: Не удается объединить equalTo() с EnDat()
Я прочитал несколько сообщений о проблемах объединения нескольких запросов. Но каково альтернативное решение для моего случая? Почему это работает в Windows? В Windows нет ошибки! Он отлично работает и заканчивается последним сохраненным ключом. (Я использую редактор Unity)
Ответ №1:
Чтобы реализовать разбиение на страницы, вам нужно будет запомнить два значения, чтобы узел начинался/заканчивался на:
- его ключ
- значение свойства, по которому вы сортируете
Если вы хотите возвращать только userID
узлы , равные X12
и заканчивающиеся на узле с ключом lastSavedKey
, вы можете сделать это с помощью:
OrderByChild("userID").StartAt("X12").EndAt("X12", lastSavedKey).LimitToLast(5);
Я говорю «возможно» здесь, так как я никогда не пробовал комбинацию startAt и EnDat с ключом. Если это не сработает, удалите StartAt
предложение — в этом случае вы можете просто удалить некоторые узлы с другим userID
кодом приложения.
Комментарии:
1. Ваш код работает! Интересно, так что в этом нет необходимости
EqualTo
. Я не убиралStartAt