Добавление/вычитание дней в ISODate в оболочке MongoDB

У меня есть запрос, где мне нужно получить события, которые за один день до или после определенной даты. Мне нужно добавить или вычесть один день на эту переменную 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 в оболочке mongodb?

Ответ 1

Это ответ на Запрос, чтобы получить последние данные за X минут с помощью 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 - ваше количество дней)

Ответ 2

Не точный ответ, но связанный.

Мне нужно было увеличить поле даты для всех элементов в моей коллекции MongoDB.

Запрос ниже добавит 1 день к myDateField в myCollection.

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
  • Используйте минус, если вам нужно вычесть/вернуться назад во времени.