Firebase Firestore嵌套属性查询及邮箱存储结构咨询
Firestore 查询与数据结构问题解答
1. 查询邮箱非空且非空白的用户
你的数据结构里邮箱嵌套在profile字段下,Firestore支持直接通过点语法查询嵌套字段。要筛选邮箱存在且不是空白字符串的用户,以JavaScript SDK为例,可以这么写:
const db = firebase.firestore(); db.collection('users') .where('profile.email', 'exists', true) .where('profile.email', '!=', '') .get() .then(querySnapshot => { querySnapshot.forEach(doc => { console.log(doc.id, '=>', doc.data()); }); });
两个过滤条件的作用:
where('profile.email', 'exists', true):确保文档中确实存在profile.email字段,排除完全没设置邮箱的用户where('profile.email', '!=', ''):排除邮箱字段为空字符串的情况
其他语言SDK的语法逻辑一致,核心都是通过点路径指向嵌套的邮箱字段,组合这两个条件即可完成筛选。
2. Firestore是否需要调整邮箱的存储层级?
不需要。Realtime Database要求把常用查询字段放在顶层,是因为它不支持嵌套字段的索引与复杂查询;但Firestore完全支持嵌套字段的查询和索引创建,你当前把邮箱放在profile下的结构既符合数据分组逻辑,也不影响查询效率。
第一次执行上述查询时,Firestore会自动提示你创建对应的复合索引,直接按提示操作即可,无需调整现有数据结构。
内容的提问来源于stack exchange,提问作者Moblize IT
相关产品推荐
相关产品推荐

