我在MongoDB中有一个'对话'集合,我从NodeJS查询使用返回的数据来呈现对话的页面。
据我所知,数据已正确存储在数据库中,当我查询它时,除了几个嵌套对象 - 对话所属的两个用户之外,所有内容都会回来。 / p>
这是我在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"
}
]
});
这是对话文档的创建:
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});
}
});
});
非常感谢你的帮助!
答案 0 :(得分:1)
似乎一切正常,console.log
默认情况下不会打印嵌套对象。尝试使用:
console.log(JSON.stringify(conversation))
记录对话以查看参与者对象时。
答案 1 :(得分:0)
修正了它!
安德列斯克上面的答案是朝着正确方向迈出的一大步。正如他所说,一切都很好,但我没有以正确的方式访问返回的对象。现在很明显,但我没有提供'convos'对象的索引号。
我只需要这样做,即使我只是从MongoDB获取一个'对话'文档:
console.log(convos[0].participants.user1.username);