Flatter Firestore startAt () endtAt () не работает, когда строковые значения orderby - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь использовать startAt ([1]) и endAt ([3]) при сортировке по названию, но это не работает.

QuerySnapshot snapshot = await Firestore.instance.collection('items')
  .orderBy("title", descending: false).startAt([1]).endAt([2]).limit(2).getDocuments();

Когда я пытаюсь по порядку по рангу startAt ([1]) и endAt ([3]) это работает.

QuerySnapshot snapshot5 = await Firestore.instance.collection('items')
  .orderBy("rank", descending: false).startAt([1]).endAt([2]).limit(2).getDocuments();

Работает, когда я не использую endAt ()

Почему это не работает, когда я упорядочиваю по названию?

QuerySnapshot snapshot = await Firestore.instance.collection('items')
  .orderBy("title", descending: false).startAt([1]).limit(2).getDocuments();

У кого-нибудь есть идеи?

Что я попробовал: 1. убедиться, что пакеты обновлены 2. созданы индексы в хранилище

[ЭТО НЕ РАБОТАЕТ] QuerySnapshot snapshot = await Firestore.instance.collection ('items'). OrderBy ("title", нисходящий: false) .startAt ([1]). EndAt ([2]). Limit (2) .getDocuments ();

[THIS WORKS]
QuerySnapshot snapshot5 = await Firestore.instance.collection('items')
  .orderBy("rank", descending: false).startAt([1]).endAt([2]).limit(2).getDocuments();

[THIS WORKS]
QuerySnapshot snapshot = await Firestore.instance.collection('items')
  .orderBy("title", descending: false).startAt([1]).limit(2).getDocuments();

Я ожидал, что смогу использовать endAt () при фильтрации, но с ошибкой его выброса

1 Ответ

0 голосов
/ 22 января 2019

Я предполагаю, что ваши поля rank являются числовыми, а ваше поле title является строкой.В этом случае это ожидаемое поведение.

Firestore фильтрует запросы по значению , а не по смещению.Поэтому, когда вы:

.orderBy("rank", descending: false).startAt(1).endAt(2)

Документы упорядочены по их рангу, а затем возвращаются документы с рангом от 1 до 2 (включительно).

Когда вы делаете:

.orderBy("title", descending: false).startAt(1).endAt(2)

Документы упорядочены по названию, а затем возвращаются документы с заголовком от 1 до 2.Но поскольку заголовки являются строками, а не числами, это означает, что ни один документ не соответствует условию и ничего не возвращается.

В Firestore отсутствует концепция офсетных запросов, когда вы говорите, чтобы пропустить первый nрезультаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...