Доступ к документу, когда вы не знаете имени документа

#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 (что подразумевается в предыдущем комментарии), это ссылка на документ (или, точнее, одно из его свойств — ссылка на документ)