【发布时间】:2013-05-05 13:59:33
【问题描述】:
首先,请原谅我的英语。
现在,我面临的问题是,现有数据库在“startOn”对象中有一个名为“Date”的列。这意味着,它就像“startOn.Date”,它有像yyyy/dd/mm 这样的数据。假设,我有一个类似的记录:2013/06/05。问题是,我需要从2 days 到7 days 之后获取数据。这意味着$gte: +2 days 和$le: +7 days。
我尝试了几种方法,例如
$gte: use("RFCtoClean")(new Date(year, month - 1, day + 2)),
RFCtoClean 是:
function RFCtoClean(d) {
d = new Date(d);
return d.getUTCFullYear() + "/" + pad(d.getUTCDate()) + "/" + pad(d.getUTCMonth() + 1);}
除了以下代码的回调返回undefined之外什么都没有返回。
var currentDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
var day = currentDate.getDate()
, month = currentDate.getMonth() + 1
, year = currentDate.getFullYear();
Event.find({
author: user_id,
"startOn.Date": {
$gte: use("RFCtoClean")(new Date(year, month - 1, day + 2)),
$le: use("RFCtoClean")(new Date(year, month - 1, day + 7))
}
}, '_id title location startOn attendees', {
limit: limit
})
.sort({_id: -1})
.execFind(function(err, events) {
// events variable is undefined here and empty err object,
});
谁能帮我摆脱困境?
【问题讨论】:
-
您是说文档包含日期作为字符串吗? “YYYY/MM/DD”?并且您想将其作为日期类型而不是字符串来操作?
-
真的是“YYYY/DD/MM”而不是“YYYY/MM/DD”吗?如果它是 MM/DD,那么您实际上可以为此比较字符串,但如果它像您建议的那样是 DD/MM,您将不得不使用 $where 并转换为日期。如果该字段是字符串,mongo 会将其视为字符串,而不是日期,例如,字符串“2000/31/01”“大于”“2000/01/02”,因为日期先到字符串,即使月份更高,而“2000/01/31”将“小于”“2000/02/01”。
-
如果日期采用这种完全奇怪且非标准的格式,那么真正的问题不是数据有效性吗? IE。没有任何东西以这种格式读取日期 - 所以任务不应该是修复整个集合以具有“正常”格式的日期并从现在开始清理它吗?
-
我会等待确认 - d = new Date(d);意味着用这个字符串调用 Date 会返回一个有效的日期,这意味着它必须是“YYYY/MM/DD”所以也许它只是一个“错字”? OP将不得不回复。 @HamzaWaqas 你能确认一下字符串格式是什么吗?
-
这个标题具有误导性。标题中所述的格式与问题中使用的格式不匹配。
标签: javascript node.js mongodb mongoose