【问题标题】:Mongoose returning [Object] instead of actual embedded documentMongoose 返回 [Object] 而不是实际的嵌入文档
【发布时间】:2014-09-20 03:55:28
【问题描述】:

当我在集合中填充引用时,被引用集合中的嵌入文档显示为 [Object] 而不是实际文档。

更多细节

我有一个歌曲架构

var songSchema=new Schema({
    songName:String
});

专辑架构

 var albumSchema=new Schema({
    title:String,
    favs:Number,
    songs:[songSchema]
})

以及引用专辑的播放列表架构。

  var playlistSchema=new Schema({
    title:String,
    items: { type: Schema.ObjectId, ref: 'Album' }
})

现在当我运行以下查询时

 Playlist
 .find()
 .populate('items')
 .exec(function (err, playlists) {
  if (err) return handleError(err);
  console.log("Result:"+playlists);
  })

我得到以下结果

Result:{ _id: 53d6b605842416b83b5fe472,
  title: 'Sad',
  items: 
   { _id: 53d6b605842416b83b5fe471,
     title: 'Awaz',
     favs: 500,
     __v: 0,
     songs: [ [Object], [Object] ] },
  __v: 0 }

请注意歌曲数组如何具有 [Object] 数组而不是实际的嵌入对象。如何让实际文件显示出来?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    “歌曲”嵌套超过 2 层,因此默认情况下输出由“[Object”] 表示。尝试这样做:

    playlists[0].songs.forEach(function (song) {
      console.log(song);
    });
    

    如果您使用的是快递。

    app.get('/playlists', function (req, res, next) {
      mongoose.model('Playlist').find().populate('items').exec(function (err, docs) {
        if (err) return next(err);
        res.json(docs);
      })
    });
    

    【讨论】:

    • 好的。语法实际上是 playlists[0].items.songs.forEach(function (song) { console.log(song); });所以这行得通。但我希望能够将此结果直接交给前端,有没有办法自动解压?我不想手动解析和重新安排这个
    • 如果只对歌曲进行操作,为什么不直接查询歌曲呢?
    • 我也需要专辑数据:(
    • 好吧,如果你想直接传递数据。尝试对结果集执行 JSON.stringify()。
    • 你先生是个天才熊抱 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2022-10-21
    • 2019-05-29
    • 2021-05-10
    • 1970-01-01
    • 2021-01-01
    • 2014-12-11
    相关资源
    最近更新 更多