Firestore可获取所有文档却无法检索单个文档的问题排查
Firestore 文档查询异常问题记录
异常表现
- 可正常获取
users集合全量文档,遍历返回结果时,可正常打印每个文档的ID与对应数据;但使用遍历得到的ID创建文档引用、判断文档存在性时,始终提示文档不存在,对应逻辑参考:
const users = await db.collection('users').get(); users.forEach(user => { console.log(user.id, user.data()) // 可正常运行,输出对应ID与数据 const userRef = db.collection('users').doc(user.id) if (userRef.exists) { console.log("User exists") } else { console.log("User does not exist") // 实际运行会走到该分支 } })
- 直接在代码中硬编码文档ID字符串执行单文档查询,可正常获取到文档数据,对应逻辑参考:
async getUser() { const id = "some-id-to-a-document" const usersRef = fb.db.collection('users').doc(id); const doc = await usersRef.get(); if (!doc.exists) { console.log('No such document!'); } else { console.log('Document data:', doc.data()); // 实际运行可正常走到该分支 } }
- 将文档ID作为参数传入
getUser方法执行查询,哪怕控制台能正确打印传入的ID值,也会提示文档不存在,对应逻辑参考:
async getUser(id) { console.log(id) // 可正常打印输出传入的ID const usersRef = fb.db.collection('users').doc(id); const doc = await usersRef.get(); if (!doc.exists) { console.log('No such document!'); // 实际运行会走到该分支 } else { console.log('Document data:', doc.data()); } }
问题排查结果
该问题为开发常见低级失误:在通过ID引用文档时,人为传入的ID值末尾意外携带了空格,导致文档匹配失败。
比如实际传入的ID为"kahgsdjhagsd "(末尾带空格),与真实文档ID"kahgsdjhagsd"不一致,对应错误示例:
const id = "kahgsdjhagsd " // 正确值应为"kahgsdjhagsd" const usersRef = fb.db.collection('users').doc(id);
注意:控制台打印字符串时不会显式标注首尾空格,容易误判ID内容完全匹配
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

