【发布时间】:2016-08-09 14:35:37
【问题描述】:
我正在 mongodb shell 中进行以下聚合:
db.sensors.aggregate([
{ $match: { timestamp: {$gte: ISODate("2016-08-08T15:46:00.0Z")} } },
{ $group: {
_id: "$sensorId",
avgSensor: { $avg: "$value" },
avgDuration: { $avg: "$duration"}
}}
])
效果很好,并为我提供了时间戳晚于 15:46 的文档聚合。
如果我在 Node.js 中做同样的事情:
sensors.aggregate([
{ $match: { timestamp: { $gte: new Date('2016-08-08T15:46.000Z') } } },
{ $group: {
_id: "$sensorId",
avgSensor: { $avg: "$value" },
avgDuration: { $avg: "$duration"}
}}
], function (err,aggregate) { ...error handling stuff }
然后我得到一组不同的(错误的)数据,似乎忽略了日期并匹配所有内容。
所以我认为ISODate() 和Date() 没有直接可比性。知道如何解决这个问题,以便我的 javascript 工作吗?
这可能是一个线索:如果我尝试在 mongodb 中执行日期范围,它可以正常工作,但 javascript 中的日期范围返回不匹配:
sensors.aggregate([
{ $match: { timestamp: {
$gte: new Date('2016-08-08T15:46.000Z'),
$lt: new Date('2016-08-09T09:00.00Z')
} } },
{ $group: {
_id: "$sensorId",
avgSensor: { $avg: "$value" },
avgDuration: { $avg: "$duration"}
}}
], function (err,aggregate) { ...error handling... }
【问题讨论】:
-
你试过用其他
Date构造函数new Date(2016,7,8,15,46,0)吗? -
new Date('2016-08-08T15:46.000Z')返回undefined; Node.jsDate无法解析 ISO 日期。 -
感谢@chridam 的回答。似乎使用 ISODate 格式的任何努力都行不通。
标签: node.js mongodb aggregation-framework