Я вижу потенциальное решение - запустить 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)