gpt4 book ai didi

node.js - Mongoose 更新 *ONE* 字段(如果找到),否则使用所有字段创建新字段

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:46 26 4
gpt4 key购买 nike

假设我有一个包含多个字段的架构。如果文档与我的查询匹配,我只想更新一个字段。但是,如果没有,我想创建一个包含所有字段值的新文档。有没有办法使用 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
});

关于node.js - Mongoose 更新 *ONE* 字段(如果找到),否则使用所有字段创建新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42801218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com