Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 在mongodb中将字符串转换为日期?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 在mongodb中将字符串转换为日期?

Javascript 在mongodb中将字符串转换为日期?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我使用find获得结果,然后在javascript中应用Array.prototype.filter来过滤格式为dd-mm-yyyy的两个给定日期字符串之间的日期 let query = {}; req.query.query && (query.name = new RegExp(req.query.query, 'i')); req.query.gender && (query.gender = new RegExp(`^${req.query.gender}

我使用
find
获得结果,然后在javascript中应用
Array.prototype.filter
来过滤格式为
dd-mm-yyyy
的两个给定日期字符串之间的日期

let query = {};
req.query.query && (query.name = new RegExp(req.query.query, 'i'));
req.query.gender && (query.gender = new RegExp(`^${req.query.gender}$`, 'i'));
Student.find(query, { roll: 1, name: 1, _id: 0, email: 1, DOB: 1, gender: 1 }, (err, students) => {
    if (err) {
        next(err);
    }
    else {
        if (req.query.DOB_from && req.query.DOB_to) {
            let from = toDate(req.query.DOB_from);
            let to = toDate(req.query.DOB_to)
            res.send(filterBetweenDates(students, from, to));
        }
        else {
            res.send(students)
        }
    }
});


/**
 * Returns time val in mil secs from a date string in Indian format i.e dd-mm-yyyy
 * @param {string} dateStr 
 */
function toDate(dateStr) {
    let a = dateStr.split('-').map(Number);
    let d = new Date(a[2], a[1] - 1, a[0]);
    return d.getTime();
}

/**
 * Filters the result which matches the date
 * @param {Student1[]} students resultant students array
 * @param {Number} from time val in millisecs(from)
 * @param {Number} to time val in millisecs(from)
 */
function filterBetweenDates(students, from, to) {
    return students.filter(({ DOB }) => {
        return (from <= toDate(DOB)) && (to >= toDate(DOB));
    });
}
您可以使用聚合将字符串
DOB
更改为日期,然后可以
$match
更改日期,对于更改用户日期格式,可以使用libaray


是的,可以在查询本身中完成,但请先发布一些样本集合Sure@AnthonyWinzlet我将使用样本集合进行更新。@AnthonyWinzlet我添加了一个样本集合。将字符串转换为日期(可以使用矩.js),然后在查询中使用
$lte
$gte
运算符。@c1more在我的数据库中,我已以字符串格式
dd-mm-yyyy
保存。如何将用户输入更改为mongo的日期格式?我可以在
$lte
$gte
中传递javascript日期对象吗?使用库更改用户日期格式。。。然后,您可以轻松地匹配mongod日期
    [
    {
        "name": "vib",
        "roll": 413,
        "email": "abc@example.com",
        "DOB": "25-07-1997",
        "gender": "Male"
    }
    {
        "name":"abc",
        "roll":123,
        "email": "abc@xyz.com",
        "DOB": "07-11-2000",
        "gender": "Female"
    }
]
db.collection.aggregate([
  {
    "$addFields": {
      "date": {
        "$dateFromString": {
          "dateString": "$DOB"
        }
      }
    }
  },
  { "$match": { "date": { "$lte": date, "$gte": date }}}
])