Firestore несколько запросов в одном поле

Мы создаем приложение, в котором нам нужно показывать близлежащие сообщения, сделанные пользователями. Пост должен быть показан только в том случае, если с момента публикации прошло не более 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.


person Niklas Raab    schedule 05.11.2018    source источник
comment
Это должно быть и запрос AND. С запросом ИЛИ это не будет проблемой.   -  person Niklas Raab    schedule 05.11.2018
comment
Этот тип запроса в настоящее время невозможен в Cloud Firestore, поскольку было бы невозможно предоставить результаты в соответствии с гарантиями производительности Firestore. Также см. stackoverflow.com/q/50658651, stackoverflow.com/q/47581370, stackoverflow.com/q/47288921, stackoverflow.com/q/48027326   -  person Frank van Puffelen    schedule 05.11.2018


Ответы (1)


Cloud Firestore не поддерживает фильтры диапазона для разных полей. Чаще всего вы создаете отдельный запрос для каждого условия ИЛИ и объединяете результаты запроса.

Подробнее см. по этой ссылке: https://firebase.google.com/docs/firestore/query-data/queries?hl=en-us

person Samuel Silva    schedule 05.11.2018
comment
Это должен быть запрос И, а не ИЛИ, второй комментарий к ответу! - person Niklas Raab; 05.11.2018
comment
Дело в том, что Cloud Firestore не поддерживает запросы с фильтрами диапазона по разным полям. - person Samuel Silva; 05.11.2018