猫鼬:如果不存在则保存,如果存在则不更新

时间:2019-03-30 01:13:09

标签: mongoose

在猫鼬中,如果没有文档,是否有一行代码可以保存文档,否则不要更新现有的代码。

我已经在线搜索过,但是大多数答案都是关于更新现有一个文档。

2 个答案:

答案 0 :(得分:0)

经过幸运的搜索,我发现以下链接确实很有帮助:

关键是在更新参数中设置$setOnInsert,在选项参数中设置upsert:true

这是一个代码示例:

let query = {id: searchId};
let update = { 
  $setOnInsert: {
    id: searchId,
    foo: foo,
    bar: bar,
  }
};
  
let options = { upsert: true };
SampleModel.findOneAndUpdate(query, update, options)
  .catch(error => console.error(error));

绝对欢迎任何想法,答案或改进!

答案 1 :(得分:0)

编辑:请注意,这只适用于数组!

尽管这是一个旧帖子,但我发现了一些可以帮助人们解决这个问题的东西。

您可以使用 $addToSet 代替 $setOnInsert。这将添加您要插入的任何数据,但如果数据存在,则不会发生任何事情。

let query = {id: searchId};
let update = { 
  $addtoSet: {
    [id: searchId]
  }
};
  
SampleModel.findOneAndUpdate(query, update)
  .catch(error => console.error(error));