Пагинация данных из разных запросов в FIRESTORE - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу представить список объектов в моем веб-приложении, но эти объекты пришли из разных запросов, потому что Firestore не поддерживает "или условие", он просто поддерживает его с массивами в "array_contains_any". Затем мне нужно извлечь эту информацию из двух запросов, и я хотел бы объединить запросы в один, но я не знаю, возможно ли это. С другой стороны, я думаю, что я мог бы разбить его на страницы отдельно, но я не могу сделать сортировку должным образом, потому что это упорядочит мои документы отдельно, поэтому я хочу объединить запросы на один. Я очень признателен за вашу помощь.

Это вопросы:

query1 = coll_ref.where(fieldname,u'==',value)

query2 = coll_ref.where(u'fieldname',u'array_contains',value)

Я бы хотел:

query.sort(fieldname).limit(3)

Спасибо за ваше время

1 Ответ

0 голосов
/ 24 апреля 2020

Я вижу потенциальное решение - запустить query1 и query2, отсортировать их по имени поля и ограничить их тремя, а затем в коде внешнего интерфейса отсортировать эти ответы по имени поля и вернуть первые три. Например (псевдокод):

query1results = coll_ref.where(fieldname,u'==',value).sort(fieldname).limit(3)

query2results = coll_ref.where(u'fieldname',u'array_contains',value).sort(fieldname).limit(3)

combined = query1results.concatenate(query2results).unique()

combined.sort(fieldname)[:3]

Я не уверен, что ваш язык, поэтому я не могу дать вам точную реализацию. В приведенном выше примере, давайте скажем, что query1results возвращает ['apple', 'banana', 'orange'] и query2results возвращает ['banana', 'cucumber', 'kiwi'], результат query1results.concatenate(query2results).unique будет ['apple', 'banana', 'orange', 'cucumber', 'kiwi'], затем сортирует и ограничивает три, так что результат будет ['apple', 'banana', 'cucumber'], что эквивалентно query.where(query1 or query2).sort(fieldname).limit(3)

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