在MongoDB Shell中添加/减去ISODate的天数
我有一个查询,需要从中获取特定日期前一天或后一天的事件。我需要给ISODate变量加上或减去一天。我的问题是:在MongoDB Shell中添加/减去ISODate的天数,mongodb,shell,Mongodb,Shell,我有一个查询,需要从中获取特定日期前一天或后一天的事件。我需要给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
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变量添加或减去天数?这一问题已在上得到解答 在你的情况下,几天内:
"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 3600 * 24 * 3) }
或
"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 86400 * 3) }
(这里的3是你的天数)不是确切的答案,而是相关的 我需要为MongoDB集合中的所有项目增加一个日期字段,相对于存储的日期值 下面的查询将在myCollection的myDateField中添加1天
- 如果需要减去/返回时间,请对dateDiffInMs使用减号
- 我觉得你的问题被误解了
我希望您需要在查询中减去一天并添加一天,您可以这样做:
{$subtract:[x.ISODate,(1*24*60*60*1000)]
请帮助我理解您的查询:您想查找
开始日期大于或等于特定日期的事件,例如ISODate(“2015-06-21T23:59:59.999Z”)
或结束日期
小于ISODate(“2015-06-21T00:00:00.000Z”)
?我想获取开始日期和结束日期之间的事件。我猜问题是错的,我编辑了。我想从开始日期减去结束日期。你能解释一下这些数字吗?1000和86400是多少。嗨,是的,86400是3600秒(1小时)乘24小时,所以它是一天中的秒数。1000是以毫秒为单位来匹配JS日期格式这能正确处理日光变化等吗?如果是凌晨1:59,今天(比如X月22日)我们从凌晨2:00跳到凌晨3:00,我们将新的日期(ISODate().getTime()+1000*86400*1)
给我X月23日的日期,还是跳到X月24日的开始?当我们说“增加一天”时,我们不一定意味着增加24小时,而是将一天增加一天。如果当天的夏令时变化可能超过或少于24小时,因此此答案似乎完全不正确。@Racer SQL我们使用毫秒计算,因此要获得一秒钟,您必须将其乘以1000。您的答案为3天减去现在的。因为OP希望从ISODate中增加或减少天数,所以他可以在开始日期和结束日期之间进行查询。
"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 86400 * 3) }
db.myCollection.find().snapshot().forEach(
function (elem) {
const dateDiffInMs = 1 * 24 * 60 * 60000
db.myCollection.update(
{
_id: elem._id
},
{
$set: {
myDateField: new Date(elem.myDateField.getTime() + dateDiffInMs)
}
}
);
}
);
1 day = 1 * 24 * 60 * 60000 = 1 x 24 hours x 60 minutes x 60 seconds x 1000 milliseconds
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);
});
});