# #firebase #flutter #google-cloud-firestore
Вопрос:
Я запускаю запрос, чтобы получить все документы из firebase, содержащие поле location
содержит, скажем, «Найроби». Структура моей базы данных такова /posts/[userId]/userPosts/[postId]
. Теперь, когда я указываю userId
это в своем коде, я получаю документы.
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('posts')
.doc("1092987983578079255")
.collection('userPosts')
.where('location', isGreaterThanOrEqualTo: '${placemark.locality}')
.get();
setState(() {
posts = snapshot.docs.map((doc) => Post.fromDocument(doc)).toList();
isLoading = false;
});
Однако, когда я пытаюсь получить все документы во всей posts
коллекции, я получаю нулевые результаты.
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('posts')
.where('location', isGreaterThanOrEqualTo: '${placemark.locality}')
.get();
setState(() {
posts = snapshot.docs.map((doc) => Post.fromDocument(doc)).toList();
});
Я пробовал использовать код
QuerySnapshot snapshot = await FirebaseFirestore.instance
.collectionGroup("userPosts")
.where('location', isGreaterThanOrEqualTo: '${placemark.locality}')
.get();
setState(() {
posts = snapshot.docs.map((doc) => Post.fromDocument(doc)).toList();
isLoading = false;
});
но я получаю ошибку Operation was rejected because the system is not in a state required for the operation's execution. If performing a query, ensure it has been indexed via the Firebase console.
, учитывая, что это запрос только по одному критерию, я не считаю, что составной индекс необходим, но я все равно его создал.
adb logcat
не дает мне ссылку для создания индекса, даже если я оберну код, try
чтобы поймать ошибку e
.
Чего мне не хватает?
Комментарии:
1. Не могли бы вы поделиться скриншотом вашей структуры Firestore?
2. @Dharmaraj Я обновил его в вопросе.
3. Второй запрос
await postsRef.where('location', ...)
требует, чтобы у вас былоlocation
поле в документахposts
сбора. У тебя это есть?4. Нет, это
location
поле содержится в документе «правнук»posts
5. @Dharmaraj Это содержится в документе
postId