我有一个这样的收集模型:
const Task = mongoose.model('Task', {
description: {
type: String,
trim: true,
required: true
},
completed: {
type: Boolean,
default: false
}
})
当前,当用户尝试使用API更新文档时,架构中未包含的任何字段都将被忽略,并且文档将被更新。如果用户使用数据库中不可用的字段向API发送更新请求,我想抛出一个错误。
如果我在数据库中有一个ID为12345
的任务:
{
_id: 12345,
description: "Buy cheese."
completed: false
}
并且用户向该任务的API发送更新查询:
id = '12345'
updates = {
description: 'Buy Milk',
due: '1 Week' //<-- Invalid Field
}
我使用此对象来更新文档:
await Task.findByIdAndUpdate(id, updates)
猫鼬完全忽略无效的due
字段,并使用新的description
字段更新文档。
有没有一种干净的方法来避免这种无效的更新请求?
答案 0 :(得分:1)
我发现一种方法是:
params1 = {'mo1_start_date' : '12/30/2019', 'mo1_end_date' : '01/26/2020'}
csr = conn.cursor()
interconnectmo1 = csr.execute("""exec TNT.dbo.abc \
@start_date = "%(mo1_start_date)s" -- datetime \
, @end_date = "%(mo1_end_date)s" -- datetime \
, @syscode = NULL -- varchar(8000) \
, @estimate_ids = NULL -- varchar(8000)""" % (params1))
csr.execute(interconnectmo1, (params1))
答案 1 :(得分:0)
While updating add in criteria the key that comes from the front end with $exists if it's not found in database update will not return any data and you can throw an error in that case.
criteria will be {_id:id};
update will be {description: 'Buy Milk'};
if(payload.due){
criteria.due:{$exists:true},
update.due=payload.due
}
让updatedData =等待Task.update(条件,更新) if(updatedData.n == 0)抛出错误传递了无效参数
// https://docs.mongodb.com/manual/reference/method/db.collection.update/ 而且只使用一个查询