如何通过指定keycode字段查询获取Firestore中其他用户的num字段值?
问题解决方法
你打印得到的Nu {_firestore: xc...}对象是Firebase正常返回的QuerySnapshot实例,属于预期返回结构,不是报错。没有打印出目标用户num值的常见原因如下:
- 代码中
target变量的取值和数据库中目标用户存储的keycode值不匹配,包括大小写差异、多余空格、类型不一致(比如数据库存的是数字类型,代码传入的是字符串类型),导致查询没有命中任何文档,forEach遍历逻辑没有执行 - Firebase安全规则未配置users集合的读权限,查询返回空结果集
修正后带校验的调试代码
const sendNum = async(e) => { e.preventDefault(); // 优先校验target取值是否符合预期 console.log('当前查询的keycode值:', target, '类型:', typeof target); const userCol = collection(db, "users") const targetQuery = query(userCol, where("keycode", "==", target)) const targetSnapshot = await getDocs(targetQuery) // 校验查询结果是否为空 if (targetSnapshot.empty) { console.log('未查询到匹配keycode的用户数据'); return; } targetSnapshot.forEach((doc) => { const targetUserData = doc.data(); console.log('目标用户num字段值:', targetUserData.num); // 如需向目标用户发送自身的num值,可在此处调用更新目标文档 // 示例更新代码: // await updateDoc(doc.ref, { // // 可自定义字段存储接收到的num值 // receiveNum: 当前登录用户的num值 // }) }) }
安全规则排查方法
如果确认target取值无误仍然查询不到结果,可临时替换Firebase安全规则为测试权限,验证是否是权限拦截导致的问题:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, write: if true; } } }
*注意:以上规则仅用于本地调试,正式上线前必须替换为符合业务逻辑的权限规则,避免数据泄露。
内容的提问来源于stack exchange,提问作者Patato
相关产品推荐
相关产品推荐

