#firebase #flutter #dart #google-cloud-firestore
#firebase #flutter #dart #google-облако-firestore
Вопрос:
С последней версией: Flutter cloud_firestore: ^0.14.0 2
Код:
FutureBuilder(
future: _sessionsLogCollection
.where('companyId', isEqualTo: sPData.companyId)
.where('locationId', arrayContainsAny: [
'29L73oSzdQrzLUow3Mg9',
'bugdWVC6RRtHoemuxNWE',
])
// .where('locationId', isEqualTo: 'bugdWVC6RRtHoemuxNWE')
.orderBy('openDateTime', descending: true)
.get(),
У меня уже созданы индексы, так что это не проблема.
При использовании .where(‘LocationID’, равнозначно: ‘bugdWVC6RRtHoemuxNWE’) самостоятельно запрос возвращает правильные данные.
Но с .где(‘LocationID’, arrayContainsAny: [’29L73oSzdQrzLUow3Mg9′,’bugdWVC6RRtHoemuxNWE’]) сам по себе, он не выдает никакой ошибки, а просто возвращает пустой набор данных: sessionsSnapShot.data.documents.длина: 0.
** Решается с помощью .Где (Вероятно .where должен быть включен в firebase.flutter.dev/docs/ firestore /usage, поскольку в настоящее время его там нет)
Ответ №1:
Согласно вашему коду .where('locationId', isEqualTo: 'bugdWVC6RRtHoemuxNWE')
, кажется, что locationId
это не массив, а поле. Если вы хотите запросить массив, вы можете использовать только arrayContains
и arrayContainsAny
. Но поскольку это поле, то вы должны использовать whereIn
:
.where('locationId', whereIn: [
'29L73oSzdQrzLUow3Mg9',
'bugdWVC6RRtHoemuxNWE',
])
Используйте оператор in, чтобы объединить до 10 предложений равенства (==) в одном поле с логическим ИЛИ. Запрос in возвращает документы, в которых заданное поле соответствует любому из значений сравнения
https://firebase.google.com/docs/firestore/query-data/queries#array_membership
Комментарии:
1. Это сработало отлично. Проблема в том, что я не нашел .Где в firebase.flutter.dev/ docs / firestore /usage , но сейчас я вижу это в query.dart. Еще одна вещь, когда дело доходит до firebase.google.com/docs/firestore/query-data / … всегда ли синтаксис Flutter / Dart будет таким, как в Kotlin KTX?
2. Нет, kotlin ktx — это другой язык