首先,請原諒我的英語。
現在,我面臨的問題是,現有數據庫在「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」?你想把它作爲日期類型而不是字符串來操作? – 2013-05-05 05:36:33
真的是「YYYY/DD/MM」而不是「YYYY/MM/DD」?如果是MM/DD,那麼你實際上可以比較字符串,但是如果它是DD/MM就像你建議的那樣,你將不得不使用$ where和cast到日期。如果該字段是一個字符串,mongo會將它當作一個字符串對待,而不是日期,例如,字符串「2000/31/01」比「2000/01/02」更大即使月份較高,但「2000/01/31」將會「小於」「2000/02/01」。 – numbers1311407 2013-05-05 19:34:40
如果日期處於這種完全奇怪和非標準的格式,那麼這不是真正的問題數據有效性嗎?即沒有什麼會以這種格式讀取日期 - 所以不應該將整個集合修復爲具有「正常」格式的日期並從現在開始清理它。 – 2013-05-05 20:13:47