Node.js+Mongoose查询MongoDB嵌套对象无法获取完整内容
解决Mongoose嵌套子文档查询后显示[Object]的问题
我来帮你搞定这个问题,这里其实有两个核心要点:控制台的显示逻辑,以及查询时的字段投影设置。
首先,你看到的[Object]只是Node.js控制台的简写显示策略,并不是数据没被正确获取。Node.js在打印多层嵌套对象时,会把深层对象简化为[Object]来避免输出内容过长。如果想查看完整结构,只要把console.log(pla)改成下面这样就行:
console.log(JSON.stringify(pla, null, 2));
这样就能展开看到address_place和review的全部内容了。
不过从你的查询代码来看,还有一个实际问题:你在find的第二个参数(投影字段)里只指定了address_place.address、address_place.city这类子字段,而且完全没包含review字段——这会导致review数据根本不会被查询返回,address_place也只会返回你指定的那几个子属性。
要获取完整的address_place和review数据,你有两种可选方案:
方案1:不限制查询字段(获取所有数据)
直接移除find的第二个参数,Mongoose会返回文档的所有字段,包括完整的address_place数组和review数组:PlaceModel.find({}, function (err, pla) { console.log(JSON.stringify(pla, null, 2)); if(err){ console.log(err); }else{ res.render('place.ejs',{ title: 'Places', placesArray : pla, }); } })方案2:指定需要的字段,同时保留完整子文档
如果你只想获取部分顶层字段,又要保留完整的address_place和review,直接在投影字符串里写这两个字段名,而不是它们的子字段:PlaceModel.find({}, 'place_name info type address_place review', function (err, pla) { console.log(JSON.stringify(pla, null, 2)); if(err){ console.log(err); }else{ res.render('place.ejs',{ title: 'Places', placesArray : pla, }); } })
这样修改后,不管是控制台打印还是传递给模板的placesArray,都会包含完整的address_place和review数据了。
内容的提问来源于stack exchange,提问作者Giorgio
相关产品推荐
相关产品推荐

