С тех пор, как команда Firebase запустила Cloud Firestore на прошлой неделе, один вопрос / проблема, которая продолжает появляться в Stackoverflow, является результатом того, что существует два разных способа получения данных, которые должны обрабатываться немного по-разному. Поэтому, ответив на несколько из этих вопросов, я подумал, что было бы неплохо составить эту короткую статью.

Примеры, которые я использую, написаны на JavaScript, но поведение, по сути, такое же и для всех других SDK, и у меня есть соответствующие ссылки в конце.

Получение единого документа

Чтобы получить один документ из Cloud Firestore, выполните следующие действия.

  1. Создайте 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();

Запрос коллекции

При запросе коллекции вы можете получить ноль, один или несколько документов, выполнив следующие шаги.

  1. Создайте ссылку на коллекцию, которая указывает на коллекцию, из которой вы хотите получить документы.
// 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