Javascript mongoose:筛选查询对象参数
当搜索条件复杂时,我想创建一个动态查询对象 例如:Javascript mongoose:筛选查询对象参数,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,当搜索条件复杂时,我想创建一个动态查询对象 例如: dbQueryObj = { $and: [{ $or: [ { auth: req.query.auth }, { title: req.query.title } ], date: { $gte: new
dbQueryObj = {
$and: [{
$or: [
{ auth: req.query.auth },
{ title: req.query.title }
],
date: {
$gte: new Date(req.query.startDate),
$lt: new Date(req.query.endDate)
}
}]
}
有些值可能没有填写,例如req.query.endDate
可能为空,搜索对象将类似于以下内容:
cteatedDate: {
$gte: 'Wed Apr 07 2021 00:00:00 GMT 0800',
$lt: null // or Invalid Date, 'null', ..etc
}
$lt:null
,此条件将影响搜索结果,不会找到任何内容。
或者其他参数可能为null,比如req.query.auth
和req.query.title
有没有办法删除这些空值?当对象只有一个维度时,您可以通过循环删除空值,但当对象充满复杂条件(如$和$)时,或者,如何处理它时,您可以执行类似的操作-仅在查询中可用时添加值
if (req.query) {
const query = req.query;
const orQuery = [];
if (query.auth) orQuery.push({ auth: query.auth })
if (query.title) orQuery.push({ title: query.title })
const dateQuery = {};
if (query.startDate) dateQuery['$gte'] = new Date(query.startDate);
if (query.endDate) dateQuery['$lt'] = new Date(query.endDate);
const dbQueryObj = {
$and: [{
$or: orQuery,
date: dateQuery
}]
};
}
此外,您还可以为
或query
dateQuery
添加检查,如果检查不存在,请不要在查询中添加x
的值新日期(x)
产生的null
?