С тех пор, как команда Firebase запустила Cloud Firestore на прошлой неделе, один вопрос / проблема, которая продолжает появляться в Stackoverflow, является результатом того, что существует два разных способа получения данных, которые должны обрабатываться немного по-разному. Поэтому, ответив на несколько из этих вопросов, я подумал, что было бы неплохо составить эту короткую статью.
Примеры, которые я использую, написаны на JavaScript, но поведение, по сути, такое же и для всех других SDK, и у меня есть соответствующие ссылки в конце.
Получение единого документа
Чтобы получить один документ из Cloud Firestore, выполните следующие действия.
- Создайте DocumentReference, который указывает на нужный документ.
// This points to the document with the ID 'SF' // in the collection 'cities' var documentReference = db.collection('cities').doc('SF');
2. Вызовите get()
на DocumentReference, чтобы получить DocumentSnapshot.
documentReference.get().then(function(documentSnapshot) { // check and do something with the data here. });
3. Убедитесь, что указанный вами документ действительно существует.
if (documentSnapshot.exists) { // do something with the data } else { console.log('document not found'); }
4. Извлеките и используйте данные.
var data = documentSnapshot.data();
Запрос коллекции
При запросе коллекции вы можете получить ноль, один или несколько документов, выполнив следующие шаги.
- Создайте ссылку на коллекцию, которая указывает на коллекцию, из которой вы хотите получить документы.
// This points to the collection called 'cities' var collectionReference = db.collection('cities');
2. (Необязательно) Создайте Запрос на основе коллекции.
var query = collectionReference.where('capital', '==', true);
3. Позвоните get()
, чтобы получить QuerySnapshot.
query.get().then(function(querySnapshot) { // check and do something with the data here. });
4. Проверить, есть ли в результате какие-либо документы.
if (querySnapshot.empty) { console.log('no documents found'); } else { // do something with the data }
or
if (querySnapshot.size > 0) { // do something with the data } else { console.log('no documents found'); }
5. Извлеките и используйте данные. Это можно сделать двумя разными способами:
// go through all the results querySnapshot.forEach(function (documentSnapshot) { var data = documentSnapshot.data(); // do something with the data of each document. });
or
// get the data of all the documents into an array var data = querySnapshot.docs.map(function (documentSnapshot) { return documentSnapshot.data(); });
использованная литература
Подробные ссылки на различные SDKS: Android / GO / Java / JavaScript / Node.js / Objective-C / Python / Swift