Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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
Javascript mongoose:筛选查询对象参数_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

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