Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在将值作为查询传递给model.find()时,如何忽略带空字符串的值?_Node.js_Express_Mongoose - Fatal编程技术网

Node.js 在将值作为查询传递给model.find()时,如何忽略带空字符串的值?

Node.js 在将值作为查询传递给model.find()时,如何忽略带空字符串的值?,node.js,express,mongoose,Node.js,Express,Mongoose,我在前端有一个表单,它收集一些数据,然后发送到后端,向mongo数据库发出请求 服务器端我创建了一个存储表单数据的对象,并将其传递给model.find() 我得到了一个空数组作为响应,而我不应该这样做,因为我传递的对象中的一些字段有空字符串(因为表单中的值并非都是必需的) 如何让model.find()忽略带有空字符串的查询 以下是我尝试过的: 对象以提取窗体值- const values = { date: req.body.date, firstName: req.body.firstNa

我在前端有一个表单,它收集一些数据,然后发送到后端,向mongo数据库发出请求

服务器端我创建了一个存储表单数据的对象,并将其传递给model.find()

我得到了一个空数组作为响应,而我不应该这样做,因为我传递的对象中的一些字段有空字符串(因为表单中的值并非都是必需的)

如何让model.find()忽略带有空字符串的查询

以下是我尝试过的:

对象以提取窗体值-

const values = {
date: req.body.date,
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
age: req.body.age,
car: req.body.car,

};
我尝试遍历值并创建新对象,该对象只包含非空的值-

const filter = {}

for (let key in values) {

if(values[key] !== '') {
filter.key = values[key]
}
}

Model.find({ filter}).then((user) =>
res.json(user)
);

不起作用。还有什么方法可以忽略带有空字符串的选项?

filter.key=values[key]
更改为
filter[key]=values[key]

for (let key in values) {
    if(values[key]) {
        filter[key] = values[key];
    };
};

这将返回一个
filter
对象,该对象仅包含
req.body
对象中不属于
falsy

的属性,这可能是一个愚蠢的问题,但在每个表单字段都有非空数据的情况下,您是否可能使用每个表单输入来查询模型?我不确定是否理解您的问题,但是,我有一些表单验证要求在提交之前至少完成一个字段,因此查询中应该至少有一个值不是空的。这回答了你的问题吗?我提供的答案给出了你想要的:一个没有任何空字符串属性的筛选器对象。如果您的整体问题在前端仍未解决,我会认为问题在您的代码/设计中的其他地方。我有一个表单,其中包含我使用的每个值的字段输入(参见初始帖子),以便用户在数据库中搜索用户。有相当多的输入。在提交时,我只是尝试将用户的输入打包成一个查询,然后发送给mongo。比如说,我想搜索拥有红色汽车、会说法语等的用户。我希望能够链接一个要发送的查询。我做错了吗?如果你能提供更多的代码来查看,我可以再看一遍,但是根据你目前提供的,你现在有了过滤空属性的方法。所以在深入研究我的代码后,我发现我通过参数从前端发送值,因为axios get请求不允许正文数据。所以我试图从尸体上检索数据。。。然而,我仍然有同样的问题,你的回答最终会回答,所以我会将其标记为正确。非常感谢。