Поток фильтрации в зависимости от значения поля документа

# #firebase #flutter #google-cloud-firestore

Вопрос:

Я работаю над проектом Flutter, который получает данные из облачного магазина Firestore.

Это поток, в котором я получаю все данные:

 //Get Entries
  Stream<List<Evento>> getEventos(){
    return _db
        .collection('eventos')
        .snapshots()
        .map((snapshot) => snapshot.docs
        .map((doc) => Evento.fromJson(doc.data()))
        .toList());
  }
 

Это прекрасно работает для извлечения всех элементов коллекции, но в моем проекте есть экран, на котором мне нужно выбрать элементы, соответствующие значению поля.

Здесь у вас есть структура документа в коллекции «eventos»:

введите описание изображения здесь

Мне нужно получить только те документы, поле «интересы» которых равно определенной строке, например «обнаженные» или «рестораны».

Как мне изменить getEventos (), чтобы я мог фильтровать в зависимости от значения поля «интерес»?

Ответ №1:

Вы можете использовать запросы с whereIn оператором:

 Stream<List<Evento>> getEventos(){
  return _db
      .collection('eventos')
      .where('interes', whereIn: ['bares', 'restaurantes'])
      .snapshots()
      .map((snapshot) => snapshot.docs
      .map((doc) => Evento.fromJson(doc.data()))
      .toList());
}
 

Этот запрос вернет документы, в которых значение интереса равно либо bares, либо ресторанам.