Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
使用MongoDB上的自定义日期字段发出范围请求_Mongodb_Date - Fatal编程技术网

使用MongoDB上的自定义日期字段发出范围请求

使用MongoDB上的自定义日期字段发出范围请求,mongodb,date,Mongodb,Date,我的MongoDB中有一个奇怪的字段,它作为日期字段,但只是一个常规文本字段 它的值如下所示: 2012年3月3日 2013年2月23日 您是否有机会对这些值进行类似日期范围的查询?例如,我需要查询2011年1月1日至2011年3月3日之间的所有内容 我尝试使用$gte和$lte,但排序在这里不起作用 谢谢你的提示 您真正想要做的是将值更新为ISODate(),然后$gt和$lt将正常工作 function MonthToNr(month) { switch(month.toLowe

我的MongoDB中有一个奇怪的字段,它作为日期字段,但只是一个常规文本字段

它的值如下所示:

  • 2012年3月3日
  • 2013年2月23日
您是否有机会对这些值进行类似日期范围的查询?例如,我需要查询2011年1月1日至2011年3月3日之间的所有内容

我尝试使用$gte和$lte,但排序在这里不起作用


谢谢你的提示

您真正想要做的是将值更新为
ISODate()
,然后$gt和$lt将正常工作

function MonthToNr(month) {
    switch(month.toLowerCase()) {
        case 'jan': return '01';
        case 'feb': return '02';
        case 'mar': return '03';
        case 'apr': return '04';
        case 'may': return '05';
        case 'jun': return '06';
        case 'jul': return '07';
        case 'aug': return '08';
        case 'sep': return '09';
        case 'oct': return '10';
        case 'nov': return '11';
        case 'dec': return '12';
    }
}


db.test.find({date: {$exists: true}}).forEach(function(o) {
    var parts = o.date.split("-");
    o.date = ISODate(parts[2] + '-' + MonthToNr(parts[1]) + '-' + parts[0]);
    db.test.save(o);
})

您真正想要做的是将值更新为
ISODate()
,然后$gt和$lt将正常工作

function MonthToNr(month) {
    switch(month.toLowerCase()) {
        case 'jan': return '01';
        case 'feb': return '02';
        case 'mar': return '03';
        case 'apr': return '04';
        case 'may': return '05';
        case 'jun': return '06';
        case 'jul': return '07';
        case 'aug': return '08';
        case 'sep': return '09';
        case 'oct': return '10';
        case 'nov': return '11';
        case 'dec': return '12';
    }
}


db.test.find({date: {$exists: true}}).forEach(function(o) {
    var parts = o.date.split("-");
    o.date = ISODate(parts[2] + '-' + MonthToNr(parts[1]) + '-' + parts[0]);
    db.test.save(o);
})

将其转换为mongo理解的时间戳是不可能的吗?显而易见的解决方案是将其存储为日期。否则你可以使用正则表达式,但效率不高。我想我可以根据文本值添加一个额外的日期字段。有人知道这会是什么样子吗?将其转换为mongo理解的时间戳是不可能的吗?显而易见的解决方案是将其存储为日期。否则你可以使用正则表达式,但效率不高。我想我可以根据文本值添加一个额外的日期字段。有人知道那会是什么样子吗?