如何不指定doc()通过where查询从Firebase获取匹配phone字段的文档
问题原因分析
- 调用
doc()不传参数时,会生成一个新的空白文档引用,和你前面的where查询条件完全无关,查询结果为空,所以返回undefined - 删除
doc()直接调用集合的get()方法后,返回的是QuerySnapshot(查询快照)对象,不是单个文档快照,本身没有data()方法,需要先读取快照内的文档列表
正确实现代码
async getUserIdOfPhoneNumber(phone) { // 执行带条件的集合查询,获取查询快照 const querySnapshot = await this.afs .collection("users", ref => ref.where("phone", "==", phone)) .get() .toPromise(); // 无匹配数据的处理逻辑 if (querySnapshot.empty) { console.log("未找到对应手机号的用户文档"); return null; } // 取第一个匹配的文档(手机号为唯一标识的场景下仅会返回一个) const targetDoc = querySnapshot.docs[0]; console.log("文档数据:", targetDoc.data()); console.log("文档ID:", targetDoc.id); // 按需返回文档ID或完整数据 return targetDoc.id; }
额外注意事项
- 若业务中存在同一个手机号对应多个用户的场景,遍历
querySnapshot.docs数组处理所有匹配文档即可 - 原代码的then回调中没有定义
res参数,属于语法疏漏,使用async/await语法可以更直观地处理异步逻辑,避免回调嵌套问题
内容的提问来源于stack exchange,提问作者Grant Solomons
相关产品推荐
相关产品推荐

