#flutter #google-cloud-firestore
# #flutter #google-облако-firestore
Вопрос:
Я изучаю flutter и создаю свое первое мобильное приложение. Я многому научился у многих из вас в ходе этого процесса.
У меня новый вопрос. В моем приложении есть несколько документов в определенной коллекции в Firestore. Я хочу получить доступ к данным из одного документа, но я не знаю имени документа. Как я могу получить доступ к документу в flutter, если я не знаю имени документа?
Комментарии:
1. Если вы не знаете идентификатор, вам придется выполнить запрос, используя то, что вы знаете о содержимом его полей. Я предлагаю ознакомиться с документацией. support.google.com/firebase/contact/support
Ответ №1:
Вам не нужно имя документа для доступа к документу, но у документа должно быть уникальное поле, чтобы вы могли отфильтровать коллекцию и получить доступ к этому документу.
final firestore = FirebaseFirestore.instance
final query = firestore.collection('myCollection').where('uniqueField', isEqualTo: uniqueValue);
final docs = (await query.get()).docs;
final document = docs.first.data();
Пожалуйста, обратите внимание, что в последней строке кода предполагается, что вы уверены, что существует только один документ. Если это не так, вы должны проверить длину документов и выполнить дополнительную проверку после этого, чтобы отфильтровать документы и найти свой документ.
Кроме того, если вы в конечном итоге фильтруете документы на стороне flutter, и вы не уверены в том, сколько документов будет возвращено, будет хорошей идеей ограничить запрос, добавив дополнительные where
фильтры и используя limit
метод в конце запроса.
Комментарии:
1. Спасибо за ваш ответ. Я использую DocumentSnapshot для извлечения данных и получаю следующую ошибку: «Значение типа ‘Query’ не может быть присвоено переменной типа ‘DocumentSnapshot’.
2. Вот фрагмент кода: getCurrentAgentProfile() async { final DocumentSnapshot currentAgent = await agentsRef.where(‘AgentID’, равнозначно: globals.currentUid.get());
3. Большое спасибо за вашу помощь. Я смог заставить его работать.
4. @LostTexan Я рад, что помог. Не забудьте отметить ответ как ответ, пожалуйста, если это решило вашу проблему, и добро пожаловать в SO.
Ответ №2:
Вы не выполняете запрос из DocumentReferences (одного документа); вы выполняете запрос из CollectionReferences (наборов документов). DocumentSnapshot — это всего лишь один документ. Я не использую flutter (пока; дайте мне неделю или две), поэтому я не могу помочь вам с синтаксисом кода.
Комментарии:
1. Если у вас есть DocumentSnapshot (что подразумевается в предыдущем комментарии), это ссылка на документ (или, точнее, одно из его свойств — ссылка на документ)