我的MongoDB中有这个奇怪的字段,它充当日期字段,但只是一个常规文本字段。
它的价值是这样的:
您是否认为有机会对这些值进行查询等日期范围?例如,我需要在2011年1月1日到2011年3月3日之间查询所有内容。
我尝试使用$ gte和$ lte,但排序在这里不起作用。
感谢您的任何提示!
答案 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);
})