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);