String 如何从mongo集合中获取最近一周的数据,其中日期以字符串格式存储?
我正在使用mongoDB 3.4版。String 如何从mongo集合中获取最近一周的数据,其中日期以字符串格式存储?,string,mongodb,date,String,Mongodb,Date,我正在使用mongoDB 3.4版。 我有一个集合,其中日期以字符串格式存储YYYY-mm-dd。我需要从这个集合中获取上周的数据 new Date(new Date().setDate(new Date().getDate()-7)) 返回ISO日期格式的日期,该格式不能用于与字符串格式的日期进行比较。 我无法使用日期格式化程序,因为版本3.4不支持它。 是否有方法获取字符串格式的当前日期并在查询中使用它? 而且,我只需要日期,不需要时间戳。我可以想出几种方法 最简单的方法是计算上周的不同
我有一个集合,其中日期以字符串格式存储
YYYY-mm-dd
。我需要从这个集合中获取上周的数据
new Date(new Date().setDate(new Date().getDate()-7))
返回ISO日期格式的日期,该格式不能用于与字符串格式的日期进行比较。我无法使用日期格式化程序,因为版本3.4不支持它。
是否有方法获取字符串格式的当前日期并在查询中使用它?
而且,我只需要日期,不需要时间戳。我可以想出几种方法 最简单的方法是计算上周的不同日期,将它们转换为
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);
})
这将把{“日期”:“2018-02-19”}
转换为{“日期”:ISODate(“2018-02-19T00:00:00Z”)}
请注意,“2018-02-19”
将是UTC日期,因此您可能需要根据时区进行一些转换。检查此项
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")
}
//在这里,您可以使用当前日期的日期分期付款
var pastDate = week_1.getDate() - 7;
week_1.setDate(pastDate);
collection.find({"createdAt": {
$gte: week_1
}})
请尝试使用
$dateToString
从3.0版开始支持该功能$dateToString
将保存在数据库中的ISODate对象转换为字符串。但是op在数据库中有字符串。如何将所有字符串日期条目转换为ISO日期格式?您只需启动一个针对所有记录的更新查询,将现有值替换为new date(existingValue)
@Ms\u Bee我已经用必要的代码更新了答案。请注意,日期将为UTC日期。
var pastDate = week_1.getDate() - 7;
week_1.setDate(pastDate);
collection.find({"createdAt": {
$gte: week_1
}})