Борьба с созданием условия, чтобы проверить, прошло ли 30 дней с указанной ISODate
в монго.
Имя поля - creationDate
, я использую функцию find
, и я хочу найти только эти, где прошло 30 дней с даты создания.
User.find({
creationDate: {
$gte: ...
}
});
В Javascript я бы просто сделал что-то вроде
(+new Date() - +new Date(creationDate))/60/60/24 >= 30
Вкратце, я хочу найти только эти элементы, где прошло 30
дней с момента их создания в mongo db. Нужна любая помощь!
Я думаю, вам просто нужно рассчитать 30 дней до текущего времени и использовать его в качестве условия следующим образом:
let fromDate = new Date(Date.now() - 60 * 24 * 30 * 1000);
User.find({
creationDate: {
$gte: fromDate
}
});
Даты - сложная тема, поэтому я предлагаю вам использовать выделенную библиотеку, чтобы избежать проблем с ними.
Вы можете использовать моменты:
const aMonthAgo = moment().subtract(30, 'days').toDate();
Затем измените ваш запрос на:
$lte: aMonthAgo
Таким образом, вы найдете только документы с датой создания ниже, чем "месяц назад".
Функция toDate() необходима для получения собственного объекта Date из типа даты momentjs.
В соответствии с вашими потребностями и для операций, связанных с датой, я бы предложил использовать библиотеку 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.
new Date
объектnew Date
является объектомDate
а mongodb использует объектISODate
?