Mongo ISODate - как проверить, прошло ли 30 или более дней? [Дубликат]

1

Борьба с созданием условия, чтобы проверить, прошло ли 30 дней с указанной ISODate в монго.

Имя поля - creationDate, я использую функцию find, и я хочу найти только эти, где прошло 30 дней с даты создания.

User.find({ 
   creationDate: {
      $gte: ...
   }
});

В Javascript я бы просто сделал что-то вроде

(+new Date() - +new Date(creationDate))/60/60/24 >= 30

Вкратце, я хочу найти только эти элементы, где прошло 30 дней с момента их создания в mongo db. Нужна любая помощь!

Теги:
mongoose

3 ответа

3

Я думаю, вам просто нужно рассчитать 30 дней до текущего времени и использовать его в качестве условия следующим образом:

let fromDate = new Date(Date.now() - 60 * 24 * 30 * 1000);
User.find({
  creationDate: {
    $gte: fromDate
  }
});
  • 0
    Приятно. Но не имеет значения, что new Date объект new Date является объектом Date а mongodb использует объект ISODate ?
  • 1
    @Patrickkx ISODate () - это вспомогательная функция, встроенная в MongoDB и обертывающая собственный объект JavaScript Date. Когда вы используете конструктор ISODate () из оболочки Mongo, он на самом деле возвращает объект JavaScript Date. пожалуйста, проверьте compose.com/articles/understanding-dates-in-compose-mongodb
1

Даты - сложная тема, поэтому я предлагаю вам использовать выделенную библиотеку, чтобы избежать проблем с ними.

Вы можете использовать моменты:

const aMonthAgo = moment().subtract(30, 'days').toDate();

Затем измените ваш запрос на:

$lte: aMonthAgo 

Таким образом, вы найдете только документы с датой создания ниже, чем "месяц назад".

Функция toDate() необходима для получения собственного объекта Date из типа даты momentjs.

0

В соответствии с вашими потребностями и для операций, связанных с датой, я бы предложил использовать библиотеку date-fns. Вы можете просто написать запрос как

var subDays = require('date-fns/sub_days')
var olderDate = subDays(new Date(2019, 28, 3), 30)

await User.find({ 
   creationDate: {
      $gte: olderDate
   }
});

Для функции вы можете посмотреть в date-fns/sub_days.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню