[英]Check if document already exists and if yes then update, otherwise create new - Mongoose
[英]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
,但是当没有文档与查询匹配时,创建了一个没有field2
或field3
的新文档
啊,我阅读了关于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.