MongoDB查询返回空嵌套对象

我在MongoDB中有一个“对话”集合,我从NodeJS查询使用返回的数据来呈现对话的页面。

数据已经被正确地存储在数据库中,据我所知,当我查询它时,除了一对嵌套对象(即对话所属的两个用户)之外,所有事情都恢复正常。

以下是我在console.log对话中得到的内容(请注意“参与者”字段:

[ { _id: 57f96549cc4b1211abadf28e, __v: 1, messages: [ 57f96549cc4b1211abadf28d ], participants: { user2: [Object], user1: [Object] } } ] 

在Mongo shell中,参与者具有正确的信息 – 两个参与者的id和用户名。

这是架构:

 var ConversationSchema = new mongoose.Schema({ participants: { user1: { id: String, username: String }, user2: { id: String, username: String }, }, started: Number, messages: [ { type: mongoose.Schema.Types.ObjectId, ref: "Message" } ] }); 

以下是创build对话文档:

 var conv = { participants : { "user1" : { "id" : req.body.senderId, "username" : req.body.senderName }, "user2" : { "id" : req.body.recipientId, "username" : req.body.recipientName } }, created : Date.now(), messages : [] // The message _id is pushed in later. } Conversation.create(conv, function(err, newConvo){ if(err){ console.log(err); } else { newConvo.messages.push(newMessage); newConvo.save(); } }) 

最后,万一它有用,这里是对Mongo的查询:

 // view all conversations a user belongs to app.get('/messages', function(req, res){ Conversation.find({ $or : [ {"participants.user1.id" : req.user._id}, {"participants.user2.id" : req.user._id} ] }, function(err, convos){ if(err){ console.log('Error getting Convos ' + err) } else { res.render('messages', {convos: convos, currentUser: req.user}); } }); }); 

非常感谢您的帮助!

看起来一切正常, console.log默认不打印嵌套对象。 尝试使用:

 console.log(JSON.stringify(conversation)) 

logging对话以查看参与者对象。

修复!

安德烈斯克的回答是正确的方向。 正如他所说,一切正常,但我没有以正确的方式访问返回的对象。 现在很明显,但我没有提供“convos”对象的索引号。

我只需要这样做,即使我只是从MongoDB获得一个“对话”文档:

 console.log(convos[0].participants.user1.username);