Узнайте, как получить документ по идентификатору с помощью метода getDoc() в базе данных Firebase версии 9 Cloud Firestore.
- Получить все документы из коллекции
- Получить документ по идентификатору → Вы здесь
В примере Firestore Database есть коллекция городов, в которой есть четыре документа, как на скриншоте ниже.
Давайте получим первый документ из коллекции городов по идентификатору.
В данном случае: документ Edmonton, используя его ID (2l3bcSGs2vZBIc3RODwp).
Импортируем базу данных Firestore и деструктурируем три необходимых нам метода:
- getFirestore() → База данных Firestore
- doc() → В качестве аргументов принимает ссылки на базу данных, имя коллекции и ID документа
- getDoc() → Запрос getDoc() получает данные конкретного документа из коллекции на основе ссылок, указанных в методе doc().
import { getFirestore, doc, getDoc } from https://www.gstatic.com/firebasejs/9.8.4/firebase-firestore.js";
В этом примере оператор import использует CDN-версию Firebase SDK.
Инициализируйте базу данных Firestore:
const db = getFirestore();
Метод getDoc() принимает единственный аргумент, которым является метод doc().
Три аргумента метода doc() следующие:
- База данных → db
- Имя коллекции → в данном случае города (см. скриншот выше)
- ID документа → 2l3bcSGs2vZBIc3RODwp в данном случае (см. скриншот выше).
Вызовите метод doc(), передайте три аргумента и присвойте их константе docRef (краткая форма для ссылки на документ).
const docRef = doc(db, "cities", "2l3bcSGs2vZBIc3RODwp");
Вызовите метод getDoc(), передав ему в качестве аргумента docRef.
Метод getDoc() вернет обещание, добавьте перед ним ключевое слово await.
Присвойте его константе docSnap (сокращение от document snapshot).
const docSnap = await getDoc(docRef);
Чтобы получить фактические данные документа, вызовите метод data() объекта docSnap.
docSnap.data();
Оберните асинхронный запрос блоком try catch, чтобы обработать ошибку на стороне клиента, если таковая возникнет.
try {
const docSnap = await getDoc(docRef);
console.log(docSnap.data());
} catch(error) {
console.log(error)
}
Перед использованием целевого документа проверьте, существует ли он на самом деле.
try {
const docSnap = await getDoc(docRef);
if(docSnap.exists()) {
console.log(docSnap.data());
} else {
console.log("Document does not exist")
}
} catch(error) {
console.log(error)
}