Firestore含特殊字符查询属性问题:如何转义字段名中的点号?
解决Firestore中带点号的字段键查询问题
你遇到的问题本质是Firestore的路径解析规则导致的:当你用.来访问嵌套对象的属性时,Firestore会把路径里的每个.都当成嵌套层级的分隔符。所以emails.susan@xpto.com会被它解析成emails对象下的susan属性,再去访问susan里的xpto.com属性,这显然和你数据里的结构不符,自然查不到结果。
Firestore不支持用反引号或方括号来转义字段名里的点号,正确的做法是使用**FieldPath对象**来明确指定完整的字段键。
具体实现步骤
- 首先获取Firestore的
FieldPath类(模块化SDK需导入,全局firebase对象可直接调用) - 用
FieldPath构造函数创建字段路径,把嵌套层级和带点的键作为参数传入 - 在
where条件中使用这个FieldPath对象替代字符串路径
代码示例
// 模块化SDK导入方式 import { FieldPath } from "firebase/firestore"; // 全局firebase对象方式(二选一即可) // const FieldPath = firebase.firestore.FieldPath; // 构造正确的查询 db.firestore().collection('contacts') // 通过FieldPath明确指定emails下的"susan@xpto.com"键 .where(new FieldPath('emails', 'susan@xpto.com'), '==', 'Susan') .get() .then(querySnapshot => { if (querySnapshot.empty) { console.log('没有找到匹配的文档'); return; } querySnapshot.forEach(doc => { console.log(`找到文档:${doc.id}`, doc.data()); }); }) .catch(error => { console.error('查询出错:', error); });
原理说明
FieldPath的构造函数接受多个参数,每个参数代表路径的一个层级。这里new FieldPath('emails', 'susan@xpto.com')会告诉Firestore:我们要访问的是emails对象下,键名为susan@xpto.com的那个属性,不会把键里的点号当成路径分隔符,这样就能正确匹配到你数据里的字段了。
内容的提问来源于stack exchange,提问作者InfoStatus
相关产品推荐
相关产品推荐

