Мы создаем приложение, в котором нам нужно показывать близлежащие сообщения, сделанные пользователями. Пост должен быть показан только в том случае, если с момента публикации прошло не более 4 часов. Поскольку firestore не предоставляет геозапросы, мне нужно выполнить поиск, в котором возвращаются все сообщения в определенном квадрате. Это мой текущий запрос:
collection("posts")
.where("creation", isGreaterThan: DateTime.now().subtract(Duration(hours: 4)))
.where("location", isLessThan: cornor1OfSquare)
.where("location", isGreaterThan: cornor2OfSquare)
Проблема с этим запросом в том, что нельзя добавить несколько операторов where, фильтрующих по разным полям.
Фильтрация по одному свойству локально и по одному на стороне сервера невозможна, потому что в нашем приложении миллионы сообщений.
Есть ли другой способ сделать это? Например, реструктурировать данные на сервере, чтобы такие запросы были возможны? Я исследовал, но нашел только решения с «простыми» данными. Но у меня есть поле Timestamp и GeoPoint, что делает его более сложным.
Второй подход, который приходит мне на ум, заключается в использовании облачных функций, но я понятия не имею, как это сделать, и является ли это лучшим доступным решением.
Я программирую в Dart/Flutter.