我在使用 findOneAndUpdate 时遇到问题,当其中一个搜索数据未定义时 return 不会出现错误
I have problems with findOneAndUpdate, does not return an error when one of the search data is undefined
当我使用 "findOneAndUpdate" 进行搜索并且我的搜索参数之一是 "undefined" 时,我没有收到错误,而是搜索到的对象。这是代码:
var q = Q.defer();
var findOneQuery = {
_id: restId,
versionId: document.version // if this parameter is undefined
};
this.findOneAndUpdate(findOneQuery, {$set: document, $inc: {versionId: 1}}, {upsert: true, new: true}, function (updateError, updateDocument) {
if (updateError) {
q.reject(updateError);
}
else {
q.resolve(updateDocument);
}
});
return q.promise;
我认为如果我错了应该return一个错误我应该怎么做才能搜索发送的两个参数而不是其中一个?
如果参数未定义,则mongodb尝试查找参数未定义的记录。所以它不会抛出任何错误。
如果您希望 versionId 永远不会 null/undefined。然后您可以在传递给数据库查询之前验证输入。
您可以使用这个模块:
https://www.npmjs.com/package/validator
您可以轻松地围绕 findOneandUpdate 编写一个包装器方法,它可以根据您的请求精确地执行您想要的操作。
function myFindOneAndUpdate(monObj,query,update,options,callback){
//validateINput check if the params in query object are undefined
if(validateInput(query)){
monObj.findOneAndUpdate(query,update,options,callback)
}else{
throw new Error('InvalidInput');
}
}
当我使用 "findOneAndUpdate" 进行搜索并且我的搜索参数之一是 "undefined" 时,我没有收到错误,而是搜索到的对象。这是代码:
var q = Q.defer();
var findOneQuery = {
_id: restId,
versionId: document.version // if this parameter is undefined
};
this.findOneAndUpdate(findOneQuery, {$set: document, $inc: {versionId: 1}}, {upsert: true, new: true}, function (updateError, updateDocument) {
if (updateError) {
q.reject(updateError);
}
else {
q.resolve(updateDocument);
}
});
return q.promise;
我认为如果我错了应该return一个错误我应该怎么做才能搜索发送的两个参数而不是其中一个?
如果参数未定义,则mongodb尝试查找参数未定义的记录。所以它不会抛出任何错误。
如果您希望 versionId 永远不会 null/undefined。然后您可以在传递给数据库查询之前验证输入。
您可以使用这个模块:
https://www.npmjs.com/package/validator
您可以轻松地围绕 findOneandUpdate 编写一个包装器方法,它可以根据您的请求精确地执行您想要的操作。
function myFindOneAndUpdate(monObj,query,update,options,callback){
//validateINput check if the params in query object are undefined
if(validateInput(query)){
monObj.findOneAndUpdate(query,update,options,callback)
}else{
throw new Error('InvalidInput');
}
}