Как реализовать условия с булевыми операторами «и» и «или»?

# #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 .