Получить первый документ Firestore из порядка документов (Node.js )

#javascript #node.js #firebase #google-cloud-firestore

#javascript #node.js #firebase #google-облако-firestore

Вопрос:

Что я хочу сделать: я хочу получить первый документ из моей коллекции в Firestore, который должен быть упорядочен по Z-A, когда дело доходит до «описания» в документе.

Проблема: он сообщает мне «Такого документа нет!». Хотя он должен вывести мне 1 документ.

Вот код:

 getPost();

async function getPost() {

const postRef = db.collection('posts');
const doc = await postRef.orderBy('description', 'desc').limit(1).get()
.then(doc => {
  if (!doc.exists) {
    console.log('No such document!');
  } else {
    console.log('Document data:', doc.data());
  }
})
.catch(err => {
  console.log('Error getting document', err);
});

};
  

Ответ №1:

Ваша переменная doc является объектом QuerySnapshot (не DocumentSnapshot). Как вы можете видеть из документации API, у него нет вызываемого свойства exists , поэтому if (!doc.exists) всегда будет true .

Поскольку объект QuerySnapshot всегда учитывает возможность содержания более одного документа (даже если вы укажете limit(1) ), вам все равно нужно проверить размер его результирующего набора, чтобы узнать, сколько документов вы получили. Вероятно, вам следует сделать это вместо этого:

 const querySnapshot = await postRef.orderBy('description', 'desc').limit(1).get()
if (querySnapshot.docs.length > 0) {
    const doc = querySnapshot.docs[0];
    console.log('Document data:', doc.data());
}
  

Также обратите внимание, что нет необходимости использовать then / catch, если вы используете await для получения результата запроса из возвращенного обещания.