Mongo ISODate-如何检查是否超过30天?

时间:2019-03-26 23:33:11

标签: javascript node.js mongodb mongoose

努力创建条件以检查自mongo中指定的ISODate以来是否已经过去了30天。

字段名称为creationDate,我使用find函数,我只想查找自创建日期起已过去30天的这些字段。

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

在Java语言中,我只会做类似

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

简而言之,我只想查找在mongo db中创建30天已过去的元素。寻找任何帮助!

3 个答案:

答案 0 :(得分:3)

我认为您只需要计算当前时间之前的30天,并将其用作如下条件:

let fromDate = new Date(Date.now() - 60 * 24 * 30 * 1000);
User.find({
  creationDate: {
    $gte: fromDate
  }
});

答案 1 :(得分:1)

日期是一个棘手的话题,因此建议您使用专用的库,以免出现问题。

您可以使用momentjs

$lte: aMonthAgo 

然后将您的查询更改为:

const useClickOutside = (nodeElement, handler) => {

    function handleClickOutside(event) {
        if (nodeElement && !nodeElement.contains(event.target)) {
            handler();
        }
    }

    useEffect(() => {
        document.addEventListener('mousedown', handleClickOutside);
        return () =>  document.removeEventListener('mousedown', handleClickOutside);
    }, []);  
} 

通过这种方式,您将仅找到创建日期小于“一个月前”的文档。

需要toDate() function才能从momentjs日期类型获取本地Date对象。

答案 2 :(得分:0)

根据您的需要以及与日期有关的操作,我建议使用date-fns库。您只需将查询写为

IHostedServices

对于此功能,您可以查看date-fns/sub_days