繁体   English   中英

Mongoose更新* ONE *字段如果找到,否则创建新的所有字段

[英]Mongoose Update *ONE* Field if Found Otherwise Create New With All Fields

假设我有一个包含多个字段的模式。 如果文档与我的查询匹配,我想只更新一个字段。 但是,如果没有,我想创建一个包含所有字段值的新文档。 有没有办法使用Model.findOneAndUpdate

这是更具体的代码和我尝试过的代码:

var mg = require('mongoose');   
var Record = mg.model ("record", {
  field1: Number,
  field2: Number,
  field3: Number,
});

//Update field1 ONLY if found using findOneAndUpdate, else create with all fields
var query = {//My Query},
    update = {field1: 10},
    options = {upsert: true, new: true, setDefaultsOnInsert: true};

Record.findOneAndUpdate(query, update, options, function(err,result){
  //Do stuff with doc
});

上面的代码正确更新了field1 ,但是当没有文档与查询匹配时,创建了一个没有field2field3的新文档

啊,我阅读了关于upsert的文档,并意识到我需要的是在update对象中包含更新运算符并使用$setOnInsert 顾名思义,只有在插入新文档时才会设置与此运算符关联的值。 所以固定代码来自问题

var mg = require('mongoose');   
var Record = mg.model ("record", {
  field1: Number,
  field2: Number,
  field3: Number,
});

//Update field1 ONLY if found using findOneAndUpdate, else create with all fields
var query = {//My Query},
    update = {
      $set:{field1: 10},
      $setOnInsert:{field2: ..., field3: ...}
    },
    options = {upsert: true, new: true, setDefaultsOnInsert: true};

Record.findOneAndUpdate(query, update, options, function(err,result){
  //Do stuff with doc
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM