在查询中将字符串转换为日期,以获取MongoDB中两个日期之间的数据

在查询中将字符串转换为日期,以获取MongoDB中两个日期之间的数据,mongodb,Mongodb,收集数据: { "UserId":ObjectId('55525252525252'), "CreatedDate":"Fri Apr 01 2015" }, { "UserId":ObjectId('55525252525252'), "CreatedDate":"Fri Apr 01 2016" }, { "UserId":ObjectId('55525252525252'), "CreatedDate":"Fri Apr 01 2017

收集数据:

{
    "UserId":ObjectId('55525252525252'),
     "CreatedDate":"Fri Apr 01 2015"
},
{
    "UserId":ObjectId('55525252525252'),
     "CreatedDate":"Fri Apr 01 2016"
},
{
    "UserId":ObjectId('55525252525252'),
     "CreatedDate":"Fri Apr 01 2017"
}


db.getDate.find({"UserID":ObjectId('55525252525252'),"CreatedDate":{"$gte":new Date('Fri Apr 01 2015'),"$lte":new Date('Fri Apr 01 2017')}})
  • 当我执行此操作时,它没有按预期返回数据
  • 如何将字符串转换为日期以执行给定查询
您应该以格式存储日期,您可以使用以下方法转换现有的
CreatedDate
字段:

db.getDate.find().forEach(function(doc) {
    doc.CreatedDate = new Date(doc.CreatedDate);
    db.getDate.save(doc);
});
在您的查询生成中,使用
新日期(“”)


将日期存储为日期类型不是您的选项吗?我没有将CreatedDate更改为日期的选项。它正在另存为字符串您可以控制字符串格式吗?如果您可以将日期保存为ISO 8601格式(如YYYY-MM-DD格式),您的查询将按预期工作。因此,如果将CreatedDate保存为字符串,我的查询将无法工作?我看不到任何简单的方法可以使其以您现有的字符串格式工作。以ISO-8601字符串格式或日期类型存储。
db.getDate.find({
    "CreatedDate": {
        "$gte": new Date('2015-04-01'),
        "$lte": new Date('2017-04-01')
    }
})