如何从Firestore指定路径获取bool值,取值返回undefined如何解决?
问题原因
你的写法存在两个核心错误,导致无法拿到正确的字段值:
- Firestore 文档读取是异步操作,你写的
admin.firestore().collection("flags").doc("Air")只是创建了一个文档引用对象,并没有真正发起拉取数据的请求,这个引用对象本身不存在sent属性,自然返回undefined。 - 即使你发起了拉取请求,也需要等待异步操作完成,通过文档快照的指定方法才能拿到存储的字段值。
正确实现代码
async/await 写法(推荐)
注意该写法需要放在被async关键字标记的函数内使用:
// 1. 创建文档引用 const docRef = admin.firestore().collection("flags").doc("Air"); // 2. 发起异步请求拉取文档快照 const docSnapshot = await docRef.get(); // 3. 先判断文档是否存在,避免后续报错 if (!docSnapshot.exists) { console.log("目标文档不存在"); return; } // 4. 读取对应字段值 const flag = docSnapshot.get("sent"); // 也可以写成 const flag = docSnapshot.data().sent; console.log(flag); // 即可拿到正确的bool类型值
Promise 回调写法
如果不方便使用async/await,可以用promise回调的方式实现:
admin.firestore().collection("flags").doc("Air").get() .then((docSnapshot) => { if (docSnapshot.exists) { const flag = docSnapshot.get("sent"); console.log(flag); } }) .catch((error) => { console.log("文档读取失败:", error); })
注意事项
- 确保你的服务账号具备对应集合的读取权限,避免权限拦截导致读取失败
- 字段名大小写要和数据库内存储的完全一致,大小写不匹配也会返回undefined
内容的提问来源于stack exchange,提问作者Luis Fernando Scripcaru
相关产品推荐
相关产品推荐

