我正在尝试为NodeJS,Express,MongoDB应用的用户添加基本的用户到用户消息服务。
我有两个MongoDB文档用于该功能:a' Messages'包含每条消息的文档,以及“对话”和“对话”。文档,它将引用所有'消息'属于它。
因此,一旦消息到达服务器,我想为发件人和收件人的对话做一个findAndModify。如果存在此类会话,则使用新消息更新它。如果对话不存在,则创建它然后添加消息。
app.post('/messages', function(req, res){
var message = { // Create an object with the message data
sender: req.body.sender,
recipient: req.body.recipient,
messageContent: req.body.msgCont,
timeSent: Date.now()
};
Message.create(message, function(err, newMessage){ // Add the message to MongoDB
if(err){
console.log('Error Creating Message' + Err);
} else {
console.log("The New Message " + newMessage)
Conversation.findOneAndUpdate({ // Find a conversation with both the sender
$and: [ // and receiver as participants (there should
{$or: [ // only ever by one such conversatoin)
{"participants.user1.id" : req.body.sender},
{"participants.user1.id" : req.body.recipient}
]},
{$or: [
{"participants.user2.id" : req.body.sender},
{"participants.user2.id" : req.body.recipient}
]},
]}, {$setOnInsert : {
messages : message,
"participants.user1.id" : req.body.sender,
"participants.user2.id" : req.body.recipient
},
new : true,
upsert : true
}, function(err, convo){
if(err){
console.log(err + 'error finding conversation')
} else {
console.log("Convo " + convo)
}
});
}
});
res.redirect('/matches');
});
将消息添加到数据库工作正常,但是对话查询的某些内容不起作用。我得到了Convo null
的console.log,因此它没有返回错误,但没有任何内容进入对话。
如果有人能看到我出错的地方,我会对某些指导感到非常满意!
答案 0 :(得分:0)
MongoDB findOneAndUpdate
方法(documentation)没有new
选项,而是returnNewDocument
。此外,您缺少这些选项的大括号
{
returnNewDocument: true,
upsert: true
}