Firebase中DocumentReference.get(<Field>)无法读取布尔值问题求助
解决Firestore读取布尔字段
isStore的问题 我来帮你排查这个读取字段的问题,你代码里的写法确实存在错误,咱们一步步修正:
问题所在
你代码里的db.collection('users').doc(uid).get('uid.isStore')是错误的:
get()方法如果要指定读取的字段,应该直接传字段名(比如'isStore')或者字段路径数组,而不是'uid.isStore'——因为isStore是users集合下对应uid文档里的直接字段,不是uid子字段下的属性。- 另外,调用
get()后返回的是文档快照,你需要先判断文档是否存在,再通过正确的方式提取字段值。
修正后的代码示例
这里提供两种正确的读取方式,你可以根据需求选择:
方式1:使用get(fieldPath)指定单个字段
checkIfLoggedIn = () => { firebase.auth().onAuthStateChanged(user => { if (user) { const uid = user.uid; // 直接用回调里的user对象获取uid,不用重复调用currentUser const db = firebase.firestore(); db.collection('users') .doc(uid) .get() // 先获取完整文档快照,也可以传['isStore']只读取指定字段 .then(snapshot => { if (snapshot.exists) { // 用get()方法获取单个字段值 const isStore = snapshot.get('isStore'); console.log('isStore的值:', isStore); // 根据isStore的真假执行不同逻辑 if (isStore) { // 当isStore为true时的代码 console.log('当前是店铺账号'); } else { // 当isStore为false时的代码 console.log('当前是普通用户账号'); } } else { console.log('未找到对应用户的文档'); } }) .catch(error => { console.error('读取文档时出错:', error); }); this.props.navigation.navigate('mainNav'); } else { this.props.navigation.navigate('signup'); } }); };
方式2:使用data()获取整个文档数据再提取字段
如果需要读取多个字段,这种方式会更便捷:
// 在then的回调中替换成以下代码: if (snapshot.exists) { const userData = snapshot.data(); const isStore = userData.isStore; console.log('isStore的值:', isStore); // 后续的分支逻辑和上面一致 }
额外小提示
- 不需要重复调用
firebase.auth().currentUser.uid,onAuthStateChanged的回调参数user已经包含了当前用户的完整信息,直接用user.uid更高效。 - 记得添加
catch块处理读取文档时的异常,避免遗漏错误场景。
内容的提问来源于stack exchange,提问作者Arshia
相关产品推荐
相关产品推荐

