Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String 如何从mongo集合中获取最近一周的数据,其中日期以字符串格式存储?_String_Mongodb_Date - Fatal编程技术网

String 如何从mongo集合中获取最近一周的数据,其中日期以字符串格式存储?

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不支持它。 是否有方法获取字符串格式的当前日期并在查询中使用它? 而且,我只需要日期,不需要时间戳。我可以想出几种方法 最简单的方法是计算上周的不同

我正在使用mongoDB 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
            }})