Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 保存或更新Mongoose_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 保存或更新Mongoose

Javascript 保存或更新Mongoose,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,在mongoose中是否有保存或更新文档的好方法?就像我下面要找的一样 let campaign = new Campaign({ title: req.body.title, market: req.body.market, logo: req.body.logo, additional_question_information: question, status: status }); campai

在mongoose中是否有保存或更新文档的好方法?就像我下面要找的一样

 let campaign = new Campaign({
        title: req.body.title,
        market: req.body.market,
        logo: req.body.logo,
        additional_question_information: question,
        status: status
    });

 campaign.saveOrUpdate().then(function() { ... }

谢谢大家的帮助

我想你要找的是所谓的“升级”

您可以通过使用findOneAndUpdate并传递{upsert:true}选项来实现这一点,如以下示例所示:

let campaign = new Campaign({
        title: req.body.title,
        market: req.body.market,
        logo: req.body.logo,
        additional_question_information: question,
        status: status
    });

Campaign.findOneAndUpdate({
    _id: mongoose.Types.ObjectId('CAMPAIGN ID TO SEARCH FOR')
}, campaign, { upsert: true }, function(err, res) {
    // Deal with the response data/error
});
findOneAndUpdate的第一个参数是用于查看是保存新文档还是更新现有文档的查询。如果要在响应数据中返回修改过的文档,还可以添加
{new:true}
选项


此处的findOneAndUpdate文档:

您可以使用MongoDB的findAndModify函数。在mongoose中,通过调用findOneAndUpdate()本机支持这一点。这是它的文档。
请注意,在第三个参数中,它等待通过选项传递对象。如果不存在新文档,您希望在其中使用
{upsert:true}
来创建新文档。

您的问题是什么?你所做的是正确的。对不起,我一点也不清楚。我想保存一个不存在的文档,或者用新数据更新一个先前存在的文档。有没有一种方法可以在猫鼬身上做到这一点?看起来可能是See的副本。可能是See的副本。我认为.findOneAndUpdate调用中活动对象周围的大括号{}实际上不应该在那里。很好!编辑了答案。仅供参考,执行
findOneAndUpdate
不会引发任何围绕
save
的中间程序。参考: