# #javascript #angular #firebase #google-cloud-firestore
Вопрос:
Как я могу реализовать условие с помощью логических операторов and
и or
с помощью firestore?
Пример того, что я хочу сделать:
this.itemsCollection = this.afs.collection<Message>('messages', ref => {
let query: firebase.default.firestore.CollectionReference | firebase.default.firestore.Query = ref;
query = ((query.where('senderId', '==', this._cs.senderId || '') amp;amp; query.where('receiverId', '==', this.receiverId || ''))
|| (query.where('receiverId', '==', this._cs.senderId || '') amp;amp; query.where('senderId', '==', this.receiverId || '')))
return query;
})
this.items = this.itemsCollection.valueChanges();
Ответ №1:
В Firestore нет возможности выполнить ИЛИ в разных полях. Для этого вам придется выполнить несколько запросов, а затем объединить результаты в коде приложения.
Проверка ИЛИ на наличие нескольких значений в одном поле называется in
условием в Firestore и может быть выполнена с помощью:
query.where('senderId', 'in', [this._cs.senderId, ''])
Пустая строка здесь должна буквально существовать в документе, чтобы соответствовать условию. Невозможно отфильтровать документы, которых senderId
не существует, так как документы без значения для этого поля просто не будут существовать в индексе, для которого создан senderId
Firestore .