Node.js 如何使用mongoose从mongodb获取两个日期之间的数据
我的问题很简单。尝试在[01-06-2020到07-06-2020]这两个日期之间从mongodb获取记录。但不起作用。如何操作 日期格式为dd-mm-yyyy mongodb记录:Node.js 如何使用mongoose从mongodb获取两个日期之间的数据,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我的问题很简单。尝试在[01-06-2020到07-06-2020]这两个日期之间从mongodb获取记录。但不起作用。如何操作 日期格式为dd-mm-yyyy mongodb记录: [ { _id:ObjectId("5edd1df67b272e2d4cf36f70"), date:"01-06-2020", pid:1, pname:"Micheck" }, { _id:ObjectId("5edd1dk67b272e2d4cf31f72"), date:"03-06-202
[
{
_id:ObjectId("5edd1df67b272e2d4cf36f70"),
date:"01-06-2020",
pid:1,
pname:"Micheck"
},
{
_id:ObjectId("5edd1dk67b272e2d4cf31f72"),
date:"03-06-2020",
pid:2,
pname:"Zohn"
},
{
_id:ObjectId("5edd1rf67b272e2d4cf16f73"),
date:"07-06-2020",
pid:3,
pname:"Robert"
},
{
_id:ObjectId("5edd1dw67b272e2d4cf76f76"),
date:"01-05-2020",
pid:6,
pname:"Josebh"
}
]
data.controller.js:
module.exports.getReportTableData = (req, res, next) => {
let collectionname = req.query.collection;
let date1 = "01-06-2020"; //dd-mm-yyyy
let date2 = "07-06-2020"; //dd-mm-yyyy
let tableReportdata = dbc.model(collectionname);
tableReportdata.find({ date: date1,date2 }, function(err, docs) {
if (err) {
console.log(err);
return;
} else {
console.log("Successful loaded data");
res.json({ data: docs, success: true, msg: 'Data loaded.' });
}
});
};
此解决方案需要Mongo服务器版本>4.0.0 根据OPs的评论,他使用的是4.2.7版 Mongo目前将字段视为字符串,而不是日期,因此首先必须将它们转换为日期 我建议在写入DB时将字段类型更改为date,或者添加一个带有日期类型的新字段,以获得更好的性能和更少的开销 要在运行时执行此转换,必须将聚合管道与、和运算符一起使用 您的代码应该如下所示:
let date1 = new Date("2020-06-01T00:00:00.000Z"); // date objects
let date2 = new Date("2020-06-07T00:00:00.000Z");
let tableReportdata = dbc.model(collectionname);
tableReportdata.aggregate([{
$addFields: {
convertedDate: {
$dateFromString: {
dateString: "$date",
format: "%d-%m-%Y",
timezone: "UTC"
}
}
}
},
{
$match: {
convertedDate: {
$gte: date1,
$lte: date2,
}
}
}
], function(err, docs) {
if (err) {
console.log(err);
return;
} else {
console.log("Successful loaded data");
res.json({
data: docs,
success: true,
msg: 'Data loaded.'
});
}
});
您的mongo版本是什么?@AyushGupta:4.2.7如果您可以更改架构,使日期为yyyy-mm-dd,则可以根据需要进行查询并对字符串进行排序。我可以这样使用吗?让date1=新日期01-06-2020;//日期对象日期2=新日期07-06-2020;不,这将被视为MM-DD-YYYY,至少在chrome和V8@PappaS另外,最好是明确的时间和时区我在数据库中存储的日期就像字符串一样。我不能改变类型如何明确?