2015-06-23 135 views
10

我有一个查询,我需要从某个特定日期前后一天获取事件。我需要为该ISODate变量添加或减去一天。这里是我的查询:在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 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); 
     }); 

}); 

我如何添加或减去天数到蒙哥达壳的ISODate变量?

+0

帮助我了解这里查询:要寻找具有一个'到特定日期StartDate'大于或等于事件,说'ISODate(“2015-06- 21T23:59:59.999Z“)'或'EndDate'小于'ISODate(”2015-06-21T00:00:00.000Z“)'? – chridam

+0

我想获取开始日期和结束日期之间的事件。我想这个问题是错的,我编辑了。我想从startdate中减去并添加到enddate。 – cuneytyvz

回答

13

这已经回答了有关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) } 

(这里的是你的天数)

6

不是一个确切的答案,但相关。

我需要为mongodb集合中的所有项目增加一个日期字段。如果您需要减去,请使用减号。

查询下面将增加1天myDateFieldMyCollection的

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