Firestore通过文档引用可获取数据,查询id无返回结果,求排查
问题原因与解决方案
核心问题:你混淆了Firestore的文档ID和文档内的
id字段。getDoc(dr)是通过文档ID直接定位文档,所以能正常获取;- 而
where('id', '==', id)查询的是文档内部存储的名为id的字段,如果你的文档里没有这个字段,或者字段值和文档ID不匹配,查询就会返回空结果。
验证步骤:在
getDoc的回调里打印文档数据,确认是否存在id字段及对应值:
getDoc(dr).then((doc) => { console.log(doc.exists()); console.log(doc.data()); // 查看文档内是否有id字段,以及值是否和传入的id一致 });
- 解决方法:
- 使用官方提供的
FieldPath.documentId()来查询文档ID(推荐,无需冗余存储):
- 使用官方提供的
// == 查询文档ID const q = query( collection(firestore, 'TestPrograms'), where(firestore.FieldPath.documentId(), '==', id) ); getDocs(q).then((docs) => { console.log(docs.size); }); // in 查询文档ID const q2 = query( collection(firestore, 'TestPrograms'), where(firestore.FieldPath.documentId(), 'in', [id]) ); getDocs(q2).then((docs) => { console.log(docs.size); });
- 若坚持用原查询逻辑,需确保每个文档内部都存储了与文档ID完全一致的
id字段(会冗余存储数据,不推荐)。
内容的提问来源于stack exchange,提问作者ipmcc
相关产品推荐
相关产品推荐

