gpt4 book ai didi

node.js - Mongodb聚合$match mongo和javascript之间日期处理不一致

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:03 24 4
gpt4 key购买 nike

我正在 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... }

最佳答案

非常感谢@chridam 的回答。更正后的代码(包含工作日期范围)是:

var daystart=new Date(2016,07,08,16,46,0);
var daystop=new Date(2016,07,08,17,46,0);
sensors.aggregate([{$match: { timestamp: { $gte: daystart, $lt: daystop } } }, {$group: { _id: "$sensorId", avgSensor: { $avg: "$value" }, avgDuration: { $avg: "$duration"} }} ], function (err,aggregate) {

...错误处理...}

看来尝试在 Javascript 中使用 ISODate 是问题所在。请注意,使用的 Date 构造函数对于月份来说有点奇怪 - 我必须使用 07 来表示 8 月。

关于node.js - Mongodb聚合$match mongo和javascript之间日期处理不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38853735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com