Ich bin in der mongodb Shell die folgende Aggregation tun:
db.sensors.aggregate([
{ $match: { timestamp: {$gte: ISODate("2016-08-08T15:46:00.0Z")} } },
{ $group: {
_id: "$sensorId",
avgSensor: { $avg: "$value" },
avgDuration: { $avg: "$duration"}
}}
])
die gut arbeitet und gibt mir ein Aggregat von Dokumenten mit einem Zeitstempel später als 15 : 46.
Wenn ich das Äquivalent, was in 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 }
dann bekomme ich eine andere (falsche) des Datensatzes, der das Datum und Spiel auf, alles zu ignorieren scheint.
Also ich denke, dass ISODate()
und Date()
nicht direkt vergleichbar sind. Irgendeine Idee, wie ich das löse, damit mein Javascript funktioniert?
Dies kann ein Hinweis sein: Wenn ich versuche, einen Datumsbereich in mongodb tun es funktioniert gut, aber ein Datumsbereich in javascript gibt keine Übereinstimmung:
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... }
Haben Sie versucht mit dem anderen 'Date' Konstruktor' neues Datum (2016,7,8,15,46,0) '? – chridam
'neues Datum ('2016-08-08T15: 46.000Z')' gibt 'undefined' zurück; Das Node.js-Datum kann ISO-Datumsangaben nicht analysieren. – JohnnyHK
Danke an @chridam für die Antwort. Es scheint, dass alle Bemühungen, das ISODate-Format zu verwenden, nicht funktionieren. –