Javascript 根据用户的输入创建查询

Javascript 根据用户的输入创建查询,javascript,express,mongoose,Javascript,Express,Mongoose,假设我正在数据库中进行搜索 router.post('/searchLoads', ensureAuthenticated, async (req, res) => { var{ agentCode, loadNumber, pickupNumber, pickupDate } = req.body}); 用户不需要填写所有字段。 如何基于if语句构建查询?我在尝试一些类似于 result = 'await Load.find({'; if (agentCode !== unde

假设我正在数据库中进行搜索

router.post('/searchLoads', ensureAuthenticated, async (req, res) => {
var{ agentCode, loadNumber, pickupNumber, pickupDate } = req.body});
用户不需要填写所有字段。 如何基于if语句构建查询?我在尝试一些类似于

result = 'await Load.find({';
    if (agentCode !== undefined){
        result += "agentCode: agentCode, ";
    }
    if(loadNumber !== undefined){
        result += "loadNumber: loadNumber, ";
    }
    if(pickupNumber !== undefined){
        result += "pickupNumber: pickupNumber, ";
    }
    if(pickupDate !== undefined){
        result += "pickupDate: pickupDate, ";
    }
    result += "})";

但是我不知道如何运行代码,因为我已经创建了查询。有更简单的方法吗?

您可以创建一个对象,而不是创建一个字符串

假设我们使用的是ES6+,我们可以在初始化字段时使用agentCode而不是agentCode:agentCode

变量选项={ 代理代码, 装货编号, 皮卡号码, pickupDate, }; 结果=等待加载。查找选项;
这个!==未定义的检查是不必要的,因为未定义的字段将被删除。

这几乎让我达到了目的。但当我控制台日志选项时,它会输出{agentCode:'JQL',loadNumber:,pickupNumber:,PickupUpdate:,pickupTime:,shipperAddress:,shipperCity:,shipperState:,shipperZip:,shipperPhone:,deliveryDate:,deliveryTime:,destinationFacility:,DestinationTreeAddress:,destinationCity:,destinationState:,destinationZip:,destinationPhone:,已完成:未定义}然后在数据库中搜索空字符串,然后我将console.log…放入其中的每个字段。如果必须猜测,console.logpickupNumber会将`,pickupDate:`作为输出。这可能是您的输入/HTTP请求有问题,即使在表单onsubmit上禁用了输入,它仍然会传递一个搜索的对象field:undefinedNVM刚刚添加了Object.entrieOptions{ifoptions[key]==undefined{delete options[key];}}的forconst[key,value],它工作了:D