Node.js API中访问对象属性报错,Mongoose嵌套属性查询的正确方式
解决Mongoose嵌套字段查询的语法错误问题
这是使用Mongoose查询嵌套字段时很容易踩的小坑~
你遇到的报错是因为在JavaScript对象字面量中,直接将author.username作为键名是无效的语法——JS会尝试解析author这个变量的username属性,但这里我们需要的是把整个author.username当作一个字符串键,用来指向MongoDB文档里嵌套的字段。
正确的查询写法
只需要把嵌套字段的键用单引号或双引号包裹起来即可,修改后的路由代码如下:
router.get('/myblogs/:username',function(req,res){ Story.find({'author.username': req.params.username},(err,storys)=>{ if(err) { console.log(err) res.send({success:false,message:'Something went wrong in storyroute'}) } else{ // 注意:你原来写的response.render应该是res.render,这里修正了笔误 res.render('findstory',{storys:storys}) } }) })
额外注意点
别混淆两种类似的写法:
{'author.username': xxx}:匹配author子文档中username字段等于xxx的文档(这是你需要的写法){author: {username: xxx}}:匹配**整个author对象完全等于{username: xxx}**的文档(会忽略author里的其他字段,比如_id,只有当author对象只有username这一个键且值匹配时才会命中)
另外顺便提一句,你代码里的response.render应该是res.render,这是一个常见的笔误,已经在上面的示例中修正啦。
内容的提问来源于stack exchange,提问作者Riya
相关产品推荐
相关产品推荐

