You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:55:02