【发布时间】:2014-05-25 10:38:57
【问题描述】:
我目前在 mongoose 模型的帮助下将文档存储在 mongodb 中。按日期查询可以正常工作,但是当我尝试应用 $hour 运算符时,似乎返回的是 ISO 时间,而不是本地时间。
当前的命名约定为我提供了一个包含文件创建时间戳的文件名:YYYYMMDDHHMMSS-foo-bar.file
示例:数据库中的导入导致解析的时间戳的以下值:
2014 04 02 07 57 33-foo-bar.file 被解析为 ISODate("2014-04-02T05:57:33Z")。
当我进行查询以查找此项目时:我创建这样的新日期对象(日期是虚假的,只是为了我选择的查询方法):
var begin = new Date(2014, 01, 10, 13, 00, 00);
var end = new Date(2014, 01, 10, 20, 00, 00);
db.pinas.aggregate([{
$project: {
[attributes I need...]
}
, {
$match: {
'start_time': {
$gte: begin, //ISODate
$lt: end //ISODate
}
}
}]);
同样,这些 ISODates 似乎没有存储时区信息,尽管in this post ISODates 包含一些内容:注意尾随的 +01:00 ISODate("2012-07-14T01:00:00+01:00")
现在我有两个问题/问题:
我在某处读到,在 ISODates 中返回日期时间信息的目的是将“精细工作”转移到应用程序而不是 DBMS,这是真的:它在解析回 ISODatestring 的情况下工作,我检索到正确的时间(我假设知道我的本地设置?如果服务器在另一个时区怎么办?)
当我想使用 $hour 日期聚合运算符时,我应该如何将其恢复为本地时间? 当我只返回 $hour 时它是如何工作的?
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query aggregation-framework