1

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

它的值是这样的:

  • 2012 年 3 月 3 日
  • 2013 年 2 月 23 日

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

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

感谢您的任何提示!

4

1 回答 1

1

您真正想要做的是将值更新为 an 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);
})
于 2013-03-23T10:44:43.540 回答