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

时间:2013-03-23 10:27:16

标签: mongodb date

我的MongoDB中有这个奇怪的字段,它充当日期字段,但只是一个常规文本字段。

它的价值是这样的:

  • 03-Mar-2012
  • 23-FEB-2013

您是否认为有机会对这些值进行查询等日期范围?例如,我需要在2011年1月1日到2011年3月3日之间查询所有内容。

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

感谢您的任何提示!

1 个答案:

答案 0 :(得分:1)

您真正想要做的是将值更新为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);
})