Как проверить, пуст ли массив в документе пожарного депо? - PullRequest
0 голосов
/ 21 марта 2020

Я создаю приложение во флаттере и хочу выполнить запрос, чтобы определить, является ли массив в моем документе firestore пустым. Есть ли способ сделать это?

Вот изображение моих данных, структурированных в firestore.

enter image description here

Я знаю, что существует метод arrayContains , но я не уверен, как проверить наличие пустого массив . Вот мой текущий код.

_postsStream = await _firestore
        .collectionGroup('posts')
        .where('timestamp', isGreaterThanOrEqualTo: _start)
        .where('timestamp', isLessThanOrEqualTo: _end)
        .where('problems', arrayContains: )
        .snapshots();

Я оставил массивContains: намеренно пока пусто. Посоветуйте, пожалуйста, как я go о реализации этой функции. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Вы не можете сделать это в пожарном магазине в настоящее время. Что вы можете сделать:

  • Создать отдельное свойство hasProblems со значением по умолчанию false.

  • Если пользователь пытается зарегистрировать проблему, то установите флажок hasProblems.

    • Если hasProblems == false, переключите его на true и добавьте проблему в список.
    • иначе переключать не нужно, просто добавьте новую проблему к списку.
    • Если проблемы будут удалены позже, проверьте, чтобы список стал пустым. Как только он опустеет, переключите hasProblems обратно на false.

Таким образом, вы можете достичь того, что вы хотите -

postsStream = await _firestore
        .collectionGroup('posts')
        .where('timestamp', isGreaterThanOrEqualTo: _start)
        .where('timestamp', isLessThanOrEqualTo: _end)
        .where('hasProblems',isEqualsTo: false)
        .snapshots();

Может быть, вы можете иметь другие лучшие решения, но это то, что пришло мне в голову. Вы можете следовать решению, которое дал @ mubin986, но как только список становится все больше и больше, это влияет на производительность. Ура, надеюсь, это поможет.

1 голос
/ 21 марта 2020

Невозможно проверить с помощью запроса firestore, является ли массив пустым или нет.
Но вы можете выполнить следующие действия:

  • Запрос данных с помощью фильтров диапазона:
_postsStream = await _firestore.collectionGroup('posts')
   .where('timestamp', isGreaterThanOrEqualTo: _start)
   .where('timestamp', isLessThanOrEqualTo: _end)
   .snapshots();
  • После выборки данных, выполнить итерацию по всем DocumentSnapshot и проверьте, является ли массив problems пустым или нет.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...