保存或更新Mongoose

时间:2017-05-31 14:29:44

标签: 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
    });

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

感谢所有人的帮助

2 个答案:

答案 0 :(得分:13)

我认为你所寻找的东西被称为'upsert'。

您可以使用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的文档:http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate

答案 1 :(得分:0)

您可以使用MongoDB的findAndModify功能。在mongoose中,通过调用findOneAndUpdate()可以原生地支持它。这是它的文档。 http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate 请注意,在第三个参数中,它等待一个对象与选项一起传递。如果不存在,您希望在其中使用{ upsert : true }来创建新文档。