Node.js 在将值作为查询传递给model.find()时,如何忽略带空字符串的值?
我在前端有一个表单,它收集一些数据,然后发送到后端,向mongo数据库发出请求 服务器端我创建了一个存储表单数据的对象,并将其传递给model.find() 我得到了一个空数组作为响应,而我不应该这样做,因为我传递的对象中的一些字段有空字符串(因为表单中的值并非都是必需的) 如何让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
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请求不允许正文数据。所以我试图从尸体上检索数据。。。然而,我仍然有同样的问题,你的回答最终会回答,所以我会将其标记为正确。非常感谢。