我使用的是mongoDB版本3.4
我有一个集合,其中日期以字符串格式YYYY-mm-dd
存储。我需要从这个集合中获取上周的数据。
new Date(new Date().setDate(new Date().getDate()-7))
以ISO日期格式返回日期,不能用于与字符串格式的日期进行比较 我不能使用日期格式化程序,因为版本3.4不支持 有没有办法让当前日期是字符串格式并在查询中使用它? 而且,我只需要日期,没有时间戳。
答案 0 :(得分:0)
我可以想到几种方法。
最简单的方法是计算上周的不同日期,将它们转换为YYYY-MM-DD
格式,然后只比较字符串。
var listOfDates = ["2018-02-19","2018-02-18","2018-02-17","2018-02-16"]
collection.find(date:{$in:listOfDates})
<强>替代:强>
将所有日期转换为标准ISODate类型,然后使用普通查询。转换只会是一次,这是正确的做法。您甚至可以使用索引来获得更快的结果。
db.mycol.find({}).forEach(function(doc){
doc.date = new Date(doc.date)
db.mycol.save(doc);
})
这会将{"date" : "2018-02-19"}
转换为{"date" : ISODate("2018-02-19T00:00:00Z")}
请注意,"2018-02-19"
将是UTC日期,因此您可能需要根据您的时区进行一些转换。
答案 1 :(得分:0)
检查
var today = new Date();
var first = today.getDate() - today.getDay();
var firstDayWeek = new Date(today.setDate(first));
var lastDayWeek = new Date(today.setDate(first + 6));
db.getCollection('Collection').aggregate([{
$project: {
date: {
$dateFromString: {
dateString: '$date'
}
}
}
}, {
$match: {
"date": {
$lt: lastDayWeek,
$gt: firstDayWeek
}
}
}])
<强>输出强>
{
"_id" : ObjectId("5aaf77510f1ae49ecac9c1a7"),
"date" : ISODate("2018-03-20T00:00:00.000Z")
}
答案 2 :(得分:0)
var week_1 = new Date(); // current date
//这里你可以使用当前日期的日期
var pastDate = week_1.getDate() - 7;
week_1.setDate(pastDate);
collection.find({"createdAt": {
$gte: week_1
}})