【问题标题】:Save Or Update Mongoose保存或更新猫鼬
【发布时间】:2017-11-01 10:06:56
【问题描述】:

有没有一种保存或更新 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() { ... }

感谢大家的帮助

【问题讨论】:

标签: javascript node.js mongodb mongoose


【解决方案1】:

我认为您要查找的内容称为“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

【讨论】:

  • 我认为 .findOneAndUpdate 调用中活动对象周围的大括号 { } 实际上不应该存在。
  • 好收获!编辑了答案。
  • 只是做一个findOneAndUpdate 的FYI 不会引发任何围绕save 的中间件。参考:mongoosejs.com/docs/middleware.html#notes
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2019-12-05
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多