在MongoDB Shell中添加/减去ISODate的天数

时间:2015-06-23 07:42:58

标签: 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);
      });

});

如何在mongodb shell中向ISODate变量添加或减去天数?

3 个答案:

答案 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);
      });

});