You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore按UID作为嵌套对象键查询文档失败问题求助

解决Firestore嵌套对象键存在性查询问题

嘿,我来帮你搞定这个Firestore查询的问题!你原来的思路是对的——通过拼接用户UID作为嵌套对象的键路径来关联查询,但问题出在查询条件的写法上。

原代码的问题

你写的ref.where(\application.members.${this._auth.currentUserId}`, '==', !null)里,!null在JavaScript里会被解析成布尔值true,但Firestore并不会把“某个键存在”等同于这个键的值为true。如果你的application.members.UID`对应的是其他类型的值(比如对象、字符串),这个条件就匹配不到任何文档。

正确的查询写法

Firestore专门提供了exists操作符来检查某个字段/路径是否存在,不管它的值是什么。你只需要把查询条件改成这样:

getAllTenancyOffersByUserId() {
  const userId = this._auth.currentUserId;
  // 先确保userId不为空,避免无效查询
  if (!userId) return null;
  
  return this.afs.collection('collection_name', ref => 
    ref.where(`application.members.${userId}`, 'exists', true)
  );
}

为什么这样有效

  • exists: true会告诉Firestore:只要文档中存在application.members.当前用户UID这个路径(不管对应的值是对象、字符串还是其他),就把这个文档返回。
  • 我加了一个userId的空值检查,避免因为用户未登录导致userId为空,生成无效的查询路径(比如application.members.undefined)。

额外提醒

如果你的application.members是一个数组而不是对象的话,这个方法不适用,但从你的描述来看它是键为UID的对象,所以这个方案完全适配你的场景。

内容的提问来源于stack exchange,提问作者Jm3s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:11:35