Firestore引用字段查询失效:Query Builder及JS代码均无结果
问题原因及解决方案
你的核心问题是用字符串直接匹配Firestore的Reference类型字段,Firestore的Reference是特殊的对象类型,和字符串(哪怕是引用的路径字符串)不会判定为相等,所以查询无结果。
正确的做法是先构建对应的DocumentReference对象,再用这个对象作为查询条件的值:
const db = new Firestore({ projectId: projectId.trim() }); // 先创建用户的DocumentReference对象 const userRef = db.doc('/users/Ja6VILgvb3N1b4KTL0Pmthlwcrr2'); // 用这个对象作为查询条件 const offersReadSnapshot = await db.collection('offersread').where('userRef', '==', userRef).get();
如果要同时匹配offerRef和userRef,只需要添加第二个where条件即可(这种等值组合查询不需要额外创建索引,Firestore会自动支持):
const userRef = db.doc('/users/Ja6VILgvb3N1b4KTL0Pmthlwcrr2'); const offerRef = db.doc('/offers/[你的优惠文档ID]'); const offersReadSnapshot = await db.collection('offersread') .where('userRef', '==', userRef) .where('offerRef', '==', offerRef) .get();
你可以在Firestore控制台查看offersread集合里的文档,确认userRef字段的类型是Reference而非字符串,这也能直观解释为什么字符串无法匹配成功。
内容的提问来源于stack exchange,提问作者sjordan
相关产品推荐
相关产品推荐

