Firestore - используйте предложение Where и startAt с разными полями - PullRequest
0 голосов
/ 20 июня 2020

Я немного запутался в создании запроса в Android SDK Firestore. Я хочу ограничить количество документов только теми, которые были опубликованы на прошлой неделе, чтобы уменьшить количество документов, а также отфильтровать результаты, используя текст, введенный пользователем. Я хотел бы использовать предложение whereGreaterThan с полем created для даты и предложения startAt и endAt для фильтрации поля id.

Однако есть проблема. SDK требует, чтобы первое предложение orderBy использовало то же поле, что и предложение whereGreaterThan. С другой стороны, startAt и endAt также кажутся привязанными к первому предложению orderBy.

Calendar oneWeekAgo= Calendar.getInstance();
oneWeekAgo.add(Calendar.DATE, -7);
Query query = firestore.collection(BuildConfig.FULL_PATH)
.whereGreaterThan("created",oneWeekAgo.getTime())
.orderBy("created", Query.Direction.ASCENDING)
.orderBy("id", Query.Direction.ASCENDING)
.startAt(filter)
.endAt(filter + "z");

Есть ли способ привязать .startAt и .endAt ко второму orderBy? Или иным образом достичь sh цели получения отфильтрованных документов из хранилища файлов, созданных после определенной даты?

Если я удалю предложения whereGreaterThan и первый orderBy, запрос получит отфильтрованные результаты из всех документов, а не только из тех, что были созданы за последнюю неделю.

1 Ответ

0 голосов
/ 22 июня 2020

Это ограничение API, поскольку Cloud Firestore не поддерживает упорядочивание по полю, отличному от указанного неравенства. В этом случае вы должны заказать данные на стороне клиента, в данном случае в вашем приложении Android. Это объясняется и здесь .

...