Node.js中如何从Post.find().lean()返回对象获取contentType与data值
如何从Mongoose查询结果中获取contentType和data的值?
嗨,我来帮你搞定这个问题~ 从你的输出能看到,查询返回的是一个包含post对象的数组,每个post里又嵌套了photo数组,我们只需要逐层访问嵌套属性就能拿到想要的值啦,分两种场景给你说明:
1. 直接从查询返回的JS对象获取
你第一个console.log(post)输出的是原生JS对象(显示[Object]只是Node.js的简化打印,实际结构是完整的),可以直接通过链式访问拿到目标值:
Post.find().lean().exec((err, post) => { console.log(post); // 先判断数组是否有内容,避免空数组报错 if (post && post.length > 0) { // 取出数组里的第一个post对象 const targetPost = post[0]; // 取出post里的第一个photo对象 const targetPhoto = targetPost.photo[0]; // 获取需要的属性值 const contentType = targetPhoto.contentType; const data = targetPhoto.data; console.log('contentType:', contentType); console.log('data:', data); } req.post = JSON.stringify(post); console.log(req.post); })
2. 从JSON字符串req.post中获取
如果你已经把结果转成了JSON字符串,需要先解析回JS对象再访问属性:
Post.find().lean().exec((err, post) => { console.log(post); req.post = JSON.stringify(post); console.log(req.post); // 将JSON字符串解析为JS对象 const parsedPost = JSON.parse(req.post); // 同样先判断数组长度 if (parsedPost && parsedPost.length > 0) { const targetPhoto = parsedPost[0].photo[0]; const contentType = targetPhoto.contentType; const data = targetPhoto.data; console.log('contentType:', contentType); console.log('data:', data); } })
小提示:如果想看到完整的嵌套对象结构,调试时可以用console.log(JSON.stringify(post, null, 2)),这样会格式化打印出所有层级的内容,更方便排查结构问题~
内容的提问来源于stack exchange,提问作者kaks
相关产品推荐
相关产品推荐

