Как найти строку из строкового массива в firestore - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть список документов, и у каждого документа есть поле массива строк с именем «fav», в нем более 50 тыс. Электронных писем, почти 1000 документов, а в массиве «fav» каждого документа переменная длина, включая 50 тыс.,20k, 10 и т. Д. Я загружал все документы

 Firestore.instance.collection("save").snapshots();

через StreamBuilder

StreamBuilder(
      stream: Firestore.instance.collection("save").snapshots();,
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return Text("Loading Data.............");
        else {
          listdata = snapshot.data.documents;

          return _buildBody(snapshot.data.documents);
        }
      },
    )

Теперь, как я могу найти нужную электронную почту в поле каждого документа "fav"? Я должен выполнить операцию после нахождения необходимого идентификатора в массиве локально.

field

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Вопрос не очень понятен, но, насколько я понимаю, это то, что вы ищете

Firestore.instance.collection('save')
.where('fav', arrayContains: 'abc@gmail.com').snapshots()
0 голосов
/ 05 октября 2019

Вопрос не очень понятен, но, насколько я понимаю, вы хотите найти одно электронное письмо в поле массива. Этот массив содержится в каждом документе, и все документы «потоковые» в коллекции снимков.

Содержит метод: https://api.dartlang.org/stable/2.0.0/dart-core/Iterable/contains.html

bool contains (
Object element
)

Возвращает true, если коллекция содержитэлемент, равный элементу.

Эта операция будет проверять каждый элемент на предмет его соответствия элементу, если только у нее нет более эффективного способа найти элемент, равный элементу.

Равенство, используемое дляопределить, равен ли элемент элементу итерируемых значений по умолчанию для объекта. == элемента.

Некоторые типы итерируемых могут иметь различное равенство, используемое для его элементов. Например, набор может иметь пользовательское равенство (см. Set.identity), которое содержит его использование. Аналогично, Iterable, возвращаемый вызовом Map.keys, должен использовать то же равенство, что и Map для ключей.

Реализация

bool contains(Object element) {
  for (E e in this) {
    if (e == element) return true;
  }
  return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...