我有一个查询,我需要获取特定日期之前或之后一天的事件。我需要在该ISODate变量中添加或减去一天。这是我的疑问:
db.event.find().forEach( function (x) {
print("x : " + x.EventID + ", " + x.ISODate);
db.events.find( {
"$or" : [{
"StartDate" : { "$gte" : x.ISODate } // Here i need to subtract one day
}, {
"EndDate": { "$lt" : x.ISODate} // Here i need to add one day
}]
}).forEach(function(otherDay) {
print("x.EventID : " + x.EventID + ", other.Date : " + otherDay.StartDate + " - " + otherDay.EndDate);
});
});
如何在mongodb shell中向ISODate变量添加或减去天数?
答案 0 :(得分:22)
这已在Query to get last X minutes data with Mongodb
上得到解答query = {
timestamp: { // 18 minutes ago (from now)
$gt: new Date(ISODate().getTime() - 1000 * 60 * 18)
}
}
在你的情况下,好几天:
"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 3600 * 24 * 3) }
或强>
"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 86400 * 3) }
(此处 3 是您的天数)
答案 1 :(得分:15)
不是确切的答案,但相关。
我需要为MongoDB集合中的所有项目增加一个日期字段。
以下查询会在 myCollection 中将 1天添加到 myDateField 。
db.myCollection.find().snapshot().forEach(
function (elem) {
db.myCollection.update(
{
_id: elem._id
},
{
$set: {
myDateField: new Date(elem.myDateField.getTime() + 1*24*60*60000)
}
}
);
}
);
1 day = 1*24*60*60000 = 1 x 24 hours x 60 minutes x 60 seconds x 1000 milliseconds
答案 2 :(得分:2)
我觉得您的问题被误解了。
我希望您需要减去一天并在查询中添加一天,您可以这样做:{$subtract : [x.ISODate,(1 * 24 * 60 * 60 * 1000)]}
db.event.find().forEach( function (x) {
print("x : " + x.EventID + ", " + x.ISODate);
db.events.find( {
"$or" : [{
"StartDate" : { "$gte" : {$subtract : [x.ISODate,(1 * 24 * 60 * 60 * 1000)]} } // Here i need to subtract one day
}, {
"EndDate": { "$lt" : {$subtract : [x.ISODate,(-1 * 24 * 60 * 60 * 1000)]}} // Here i need to add one day
}]
}).forEach(function(otherDay) {
print("x.EventID : " + x.EventID + ", other.Date : " + otherDay.StartDate + " - " + otherDay.EndDate);
});
});