Как получить единые данные из сбора

# #javascript #google-cloud-firestore

Вопрос:

Я использую vue3 и firestore

Ссылаясь на официальный документ firestore, был способ получить документы через сбор. Но это способ получить все данные для сбора.

 const citiesRef = db.collection('cities');
const snapshot = await citiesRef.get();
snapshot.forEach(doc => {
  console.log(doc.id, '=>', doc.data());
});
 

Я хочу получить один документ через сбор.

Как получить один документ, это

 const cityRef = db.collection('cities').doc('SF');
const doc = await cityRef.get();
 

Это коллекция, за которой следует doc().

Я не могу вставить значение в документ, потому что documemt-это автоматически сгенерированный идентификатор. Поэтому я не знаю, что делать.

Ответ №1:

Вы не упомянули, какой именно документ вы конкретно ищете. В случае, если вы не знаете идентификатор документа Firestore, вы можете попробовать выполнить простой запрос, используя .where() следующее:

 const db = firebase.firestore()
db.collection("cities").where("cityName", "==", 'London').get().then(querySnapshot => {
  const matchedDoc = querySnapshot.doc[0]
})
 

В приведенном выше примере найден документ, в котором поле cityName равно London (оба учитывают регистр). QuerySnapshot содержит все документы, которые соответствовали вашему условию, указанному в методе where (). Но в случае, если вы знаете, что есть только один соответствующий документ, так как в моем случае у меня есть только один документ с именем города Лондон, вы можете напрямую получить доступ к данным документа следующим образом: querySnashots.docs[0].data() . querySnapshot.docs представляет собой массив. [0] является первым документом в нем и .data() анализирует данные из документа doc. Кроме того, вы можете использовать querySnapshot.size для получения количества документов, возвращенных из запроса.