javascript - Mongoose 日期过滤器

标签 javascript node.js mongodb mongoose

我将数据存储在 MongoDB 数据库中,我正在使用 Mongoose 查询数据。我正在尝试对我的数据运行日期查询,以从数据库中返回属于指定数据范围内的对象。

我的网络表单向负责查询 Mongo 数据库中数据的外部微服务/api 发送 API 请求。 API 接收代表天数的单个值。例如:日期:“7 日”。然后我继续像这样构建 mongoose 查询:

if (data.date) {
    const date = new Date();
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    date.setDate(date.getDate() - dateRange);
    query.start = { $lte: date.toISOString() };
    console.log(query);
}

我的数据库中的示例日期是:

开始:2016-02-10T09:09:01.000Z

然后执行查询:

Call.find(query, function (error, docs) {
    if (error) {
        callback(error, null);
    } else {
        callback(null, docs);
    }
});

最后是一个query的例子:

{ approved: 1, start: { '$lte': '2016-02-09T14:24:29.115Z' } }

但是,无论我将什么日期发送到我的 API,响应始终为空...

最佳答案

为您的查询使用实际的日期对象,而不是像您目前所做的那样使用字符串。因为 mongo 存储用 ISODate 包裹的日期 助手和底层 BSON(mongo native 使用的存储数据格式)有一个专用的日期类型 UTC 日期时间,它是一个 64 位(因此,8 字节)有符号整数,表示自 Unix 时间纪元以来的毫秒数,您的查询不会'不返回任何内容,因为它将比较 mongo 中的日期字段和 ISO 格式的字符串。

因此,放弃 toISOString() 转换并使用日期对象:

if (data.date) {
    const date = new Date();
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    date.setDate(date.getDate() - dateRange);
    query.start = { $lte: date };
    console.log(query);
}

Call.find(query, function (error, docs) {
    if (error) callback(error, null);
    callback(null, docs);    
});

更好的是,您可以使用 momentjs 具有非常直观和简单的日期时间操作 API 的插件。您可以使用的一种方法是 subtract() 获取日期对象 n 天前的函数:

if (data.date) {    
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    const date = moment().subtract(dateRange, "days");
    query.start = { $lte: date };
    console.log(query);
}

Call.find(query, function (error, docs) {
    if (error) callback(error, null);
    callback(null, docs);    
});

关于javascript - Mongoose 日期过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35318005/

相关文章:

javascript - 如何在表单提交之前显示 sweetalert 消息?

javascript - getElementByID 工作,但 jQuery 的选择器不工作

javascript - 在 Node js 应用程序中使用句柄时,将 TypeError 作为 registerHelper 不是一个函数

mongodb - mongo集合中的数据碎片

mongodb - 每个子类的 Grails 继承 MongoDb 集合

javascript - 前端和后端定时器/事件同步?

javascript - 数组中的随机文本字符串

node.js - at=error code=H12 desc ="Request timeout"in node.js.如何处理?

javascript - Express.js collection.find() 返回对象

mongodb - MongoDB 中的项目对象存在 bool 值