使用MongoDB上的自定义日期字段发出范围请求
我的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
- 2012年3月3日
- 2013年2月23日
谢谢你的提示 您真正想要做的是将值更新为
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理解的时间戳是不可能的吗?显而易见的解决方案是将其存储为日期。否则你可以使用正则表达式,但效率不高。我想我可以根据文本值添加一个额外的日期字段。有人知道那会是什么样子吗?