JavaScript读取Firestore返回的movie对象时无法获取指定字段怎么办
问题原因及解决方法
以下是你4行错误打印语句的问题说明:
console.log(doc.Title):Firestore查询返回的doc是文档快照对象,不是直接的文档数据对象,本身不存在Title属性,该写法必然返回undefined。console.log(doc.data().Title):若该写法返回undefined,大概率是字段名拼写/大小写和实际存储的不一致(Firestore字段名大小写敏感),或是文档数据为嵌套结构,字段被包裹在其他父字段下。console.log("movie is "+doc.movie.Title):和第一个错误同理,doc快照本身不存在movie属性,无法直接访问。console.log(movie.Title):代码中未定义过movie变量,直接访问会抛出变量未定义的报错。
正确调试写法
你可以先将文档数据取出存为变量,再打印字段列表确认结构,之后对应路径访问即可:
const savedMovies = await getDocs(collection(db,"users/"+currentUserID+"/savedmovies")); savedMovies.forEach((doc) => { console.log(doc.id, " => ", doc.data()); // 取出文档原始数据 const docData = doc.data(); // 打印所有字段名,确认拼写、嵌套关系 console.log("当前文档所有字段:", Object.keys(docData)); // 确认结构后对应访问即可,例如字段是小写title就写docData.title // 如果标题嵌套在movie字段下就写docData.movie.title console.log("电影标题:", docData.Title ?? "未匹配到对应字段,请检查上述字段列表"); });
排查提示
直接展开控制台打印的doc.data()结果,对照字段的准确拼写、层级结构,调整访问路径即可正常读取字段值。
内容的提问来源于stack exchange,提问作者Dolesy
相关产品推荐
相关产品推荐

