创建文档时,是否可以使用与findOneAndUpdate()
相同的选项。我知道可以设置upsert: true
,但是如果文档已经存在,我想抛出一个错误。
所以说我的数据库中有课程,以及何时插入新课程。如果使用.create()
,我将无法投影或使用精益。 :dis
如果我使用findOneAndUpdate
,则它不会对具有重复字段的文档引发错误,因为它正在更新为我不想执行的现有文档。
基本上,我想使用.findOneAndUpdate()附带的功能,但是如果它找到文档,我希望它引发错误,因为我是根据希望唯一的字段进行搜索的
答案 0 :(得分:0)
通过查找问题,您可以尝试以下方法
function updateUser(user,cb){
UserModel.find({name : user.name}, function (err, docs) {
if (docs.length){
cb('Name exists already',null);
}else{
user.save(function (err, returned) {
var leanObject = returned.toObject();
assert.equal(leanObject.schema, null);
});
}
});
}
因此,在上面的代码中,您找到了该文档,并且如果得到的结果为非空,则可以将其视为错误,否则可以将该文档另存为新条目。
答案 1 :(得分:0)
因此,为了实现预期的目标,我做了以下工作。我在其中知道会失败的查询条件。这样一来,我就可以强制使用高手,并从这些选项中受益。
async addCourse(input, projection = {}) {
const { name } = input;
const conditions = { _id: mongoose.Types.ObjectId() };
const newCourse = await this.model.findOneAndUpdate(conditions, input, {
upsert: true,
new: true,
lean: true,
projection,
runValidators: true,
context: 'query',
setDefaultsOnInsert: true,
});
return newCourse;
}