我有数据存储在MongoDB数据库中,我使用Mongoose来查询数据 . 我正在尝试对我的数据运行日期查询,以返回属于指定数据范围的数据库中的对象 .
我的webform向外部微服务/ api发送API请求,该服务负责查询Mongo数据库中的数据 . API接收代表若干天的单个值 . 例如: date: "7d"
. 然后我继续构建像这样的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);
}
和我的数据库中的示例日期是:
start: 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的日期,响应始终为空...
1 回答
使用查询的实际日期对象,而不是您目前正在执行的字符串 . 因为mongo存储用 ISODate 帮助程序包装的日期和底层BSON(mongo本机使用的存储数据格式)具有专用日期类型UTC日期时间,它是一个64位(因此,8字节)有符号整数,表示自Unix时间纪元以来的毫秒数,您的查询不会返回任何内容,因为它会将mongo中的日期字段与ISO格式的字符串进行比较 .
因此,删除 toISOString() 转换并使用日期对象:
更好的是,您可以使用具有非常直观且简单的日期时间操作API的 momentjs 插件 . 您可以使用的一种方法是 subtract() 函数来获取日期对象
n
天数: