Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB save()与对象数组有关的问题_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript MongoDB save()与对象数组有关的问题

Javascript MongoDB save()与对象数组有关的问题,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,此代码是用于在用户之间发送消息的post请求。当消息不是现有消息字符串的一部分时(即:typeof existingMessageIndex===“undefined”),它将成功。docs.save()会在未定义existingMessageIndex时导致错误(“保存传出消息时出错”) 似乎mongo不喜欢我尝试将对象数组保存为现有数组字段中的一项 有人知道我错过了什么吗 .post(function(req,res,next){ var messageStringTitle = r

此代码是用于在用户之间发送消息的post请求。当消息不是现有消息字符串的一部分时(即:
typeof existingMessageIndex===“undefined”
),它将成功。
docs.save()
会在未定义
existingMessageIndex
时导致错误(
“保存传出消息时出错”

似乎mongo不喜欢我尝试将对象数组保存为现有数组字段中的一项

有人知道我错过了什么吗

.post(function(req,res,next){
    var messageStringTitle = req.body.originatingTitle !== ''?req.body.originatingTitle:req.body.messageTitle;

    var newMessage = {
        senderDisplay: req.user.displayname,
        senderUser: req.user.username,
        senderImage: req.user.profileimg,
        originatingTitle: messageStringTitle,
        title: req.body.messageTitle,
        content: req.body.messageContent
    };
    var messageSender = function(docs){
        var tempMessageArray = docs.messagein;

        for(var i = 0; i<tempMessageArray.length; i++){
            console.log("Loop has executed: " + i);
            if(tempMessageArray[i][0]){
                if(tempMessageArray[i][0].originatingTitle===messageStringTitle && tempMessageArray[i][0].senderUser===req.user.username || tempMessageArray[i][0].senderUser===req.body.messageUser){
                    var existingMessageIndex = i;
                }
            }
        }

        console.log("===================" + existingMessageIndex);
        if(typeof existingMessageIndex === 'undefined'){
            tempMessageArray.unshift([newMessage]);
            docs.messagein = tempMessageArray;
        }else{
            docs.messagein[existingMessageIndex].unshift(newMessage);
        }
        return docs;
    };


    //Update sending user
    User.findOne({username: req.user.username}, function(e, docs){
        messageSender(docs);
        console.log(docs);   //Logs exactly what I want to be saved, however saving fails
        docs.save(function(e){
            console.log("Error saving outgoing message");
        })
    });


    //Update receiving user
    User.findOne({username: req.body.messageUser}, function(e, docs){
        messageSender(docs);
        console.log(docs);
        docs.save(function(e){
            if(e){
                console.log("Error sending message within post ('/messages')");
            }
        });

    });
.post(函数(请求、恢复、下一步){
var messageStringTitle=req.body.origingtitle!=''?req.body.origingtitle:req.body.messageTitle;
var newMessage={
senderDisplay:req.user.displayname,
senderUser:req.user.username,
senderImage:req.user.profileimg,
originatingTitle:messageStringTitle,
标题:req.body.messageTitle,
内容:req.body.messageContent
};
var messageSender=函数(文档){
var tempMessageArray=docs.messagein;
对于(var i=0;i解决方案:
需要使用
db.collection.markModified()
,因为架构“messagein”在成为对象数组时已更改为混合类型

 //Update sending user
    User.findOne({username: req.user.username}, function(e, docs){
        messageSender(docs);
        console.log(docs);   //Logs exactly what I want to be saved, however saving fails
        docs.markModified('messagein'); //ADDED
        docs.save(function(e){
            console.log("Error saving outgoing message");
        })
    });


    //Update receiving user
    User.findOne({username: req.body.messageUser}, function(e, docs){
        messageSender(docs);
        console.log(docs);
        docs.markModified('messagein'); //ADDED
        docs.save(function(e){
            if(e){
                console.log("Error sending message within post ('/messages')");
            }
        });
注意:解决方案有效,但是解释只是我的猜测,如果我错了,请纠正我。谢谢