【发布时间】:2017-07-23 09:53:14
【问题描述】:
我在 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"
}
]
});
以下是对话文档的创建:
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});
}
});
});
非常感谢您的帮助!
【问题讨论】:
标签: node.js mongodb express mongoose database