我要做什么:我想从Firestore中的收藏夹中获取第一个文档,当涉及到文档中的“描述”时,应该从ZA订购。
问题:它告诉我“没有这样的文档!”。虽然应该会输出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);
});
};
答案 0 :(得分:2)
您的变量doc
是QuerySnapshot对象(不是 DocumentSnapshot)。从API文档中可以看到,它没有名为exists
的属性,因此if (!doc.exists)
将始终为真。
由于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());
}
还请注意,如果您使用await从返回的promise中捕获查询结果,则无需使用then / catch。