node.js - 按日期查询不起作用

标签 node.js mongodb mongoose mongodb-query

我正在尝试返回当天创建的每个文档的搜索结果。下面是我使用的查询。

var query = Document.find({}).populate('contacts');
var gte = moment(req.query.date, 'DD-MM-YYYY').startOf('Day');
var lte = moment(req.query.date, 'DD-MM-YYYY').endOf('Day');
query.where('dates.createdAt').gte(gte).lt(lte);

此查询在某些天内有效,但并非全部有效。我似乎无法理解这种行为。请大家帮忙。

查询字符串中日期的格式为DD/MM/YYYY

适用于:2016-04-16T00:02:30.065Z 不适用于:2016-04-15T19:02:59.758Z

最佳答案

这是错误的,因为您没有初始化为 .utc(),并且 MongoDB 日期存储在 UTC 中:

var gte = moment.utc(req.query.date, 'DD-MM-YYYY');
var lte = moment.utc(req.query.date, 'DD-MM-YYYY').endOf('Day');

而且也不需要 startOf()

如果您不这样构造,则生成的 Date 对象会因本地时区的差异而出现偏差。因此,为什么您看不到时间与日期交叉的选择。

此外,如果日期输入为 01/01/2016,则格式字符串将为 'DD/MM/YYYY',但其中之一可能是您的问题中有一个拼写错误。

关于node.js - 按日期查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662419/

相关文章:

javascript - 带有 require 的 Node.js ES6 类

mongoose - Mongoose 中的 findByIdAndRemove 和 findByIdAndDelete 有什么区别?

node.js - 连续发出多个请求时的 Angular CORS 问题

mongodb - Mongodb shell变量只打印一次

javascript - 使用 Angular 发布到 Mongodb

java - Spring 蒙戈: How to customize _id without VO?

Mongodb,使用 $lookup 进行聚合查询

node.js - 使用 mongoose 转义一些 HTML 标签

javascript - 直接在 MongoDB 中引用 ObjectID 可以,但在 Mongoose 中不行

javascript - Firestore 查询返回空快照