我在使用 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');
}

}