Firestore如何查询文档内嵌metaData对象的date字段?
Firestore嵌套字段查询问题解答
Firestore完全支持针对文档内嵌对象字段的查询,你遇到的报错是字段路径写法错误导致的。
场景复现
你当前使用的Firestore数据库结构如下:
dummy_collection:{ [文档ID]: { data: {...}, metaData: { date: "2020-06-15", // 其余元数据字段 }, }, }
你最初使用的查询语句(错误写法):
db.collection("dummy_collection").where("metaData/date", "==", "2020-06-15")
运行后抛出的报错:
ValueError: Path metaData/date not consumed, residue: /date
错误原因
斜杠/是Firestore中集合、文档层级路径的专用分隔符,不能用来分隔文档内部的嵌套字段层级,因此SDK解析metaData/date这个字段路径时会直接识别失败。
修复方案
文档内部的嵌套字段,需要使用半角点.作为层级分隔符,修改后的查询语句可正常运行:
db.collection("dummy_collection").where("metaData.date", "==", "2020-06-15")
补充说明
- 嵌套字段的查询逻辑和顶层字段完全一致,支持等于、范围匹配、数组成员判断等所有Firestore原生支持的查询操作符
- 如果需要对嵌套字段做排序、多条件范围查询,提前在Firestore控制台为对应嵌套字段创建索引即可,索引规则和顶层字段没有区别
内容的提问来源于stack exchange,提问作者ThyR4n
相关产品推荐
相关产品推荐

