Я пытаюсь получить среднюю температуру и влажность от моего ответа JSON с интервалом в 15 минут, используя структуру MongoDB Aggregate. Я получаю SyntaxError: invalid property id @(shell):2:0
агрегат mongodb с временным интервалом
Это мой код
var datetime = new Date();
var interValue = 15*1000*60;
datetime.setHours(datetime.getHours() - 1 + interValue);
var endtime = new Date();
db.sensordata.aggregate([
{ $match : { datetime : { $gte : datetime, $lt: endtime } } },
{
$group: {
_id: {
Time: "$datetime",
Humidity: { "$avg" : "$humidity" },
Temperature: { "$avg" : "$temperature"}
},
},
},
{
$project :{ _id : 1 , Humidity : 1, Temperature: 1 } },
{ $limit : 10 },
{ $sort : {"_id.Time":1, "Humidity":1, "Temperature": 1}}
])
это мой JSON ответ
[{ "_id" : ObjectId("585db63541472bf7683eb3c5"), "datetime" : ISODate("2016-12-23T23:41:41.897Z"), "temperature" : 19, "humidity" : 23 }
{ "_id" : ObjectId("585db63a41472bf7683eb3c6"), "datetime" : ISODate("2016-12-23T23:41:46.927Z"), "temperature" : 19, "humidity" : 23 }
{ "_id" : ObjectId("585db63f41472bf7683eb3c7"), "datetime" : ISODate("2016-12-23T23:41:51.956Z"), "temperature" : 19, "humidity" : 23 }
{ "_id" : ObjectId("585db644483ab4f778a635bf"), "datetime" : ISODate("2016-12-23T23:41:56.991Z"), "temperature" : 19, "humidity" : 23 }
{ "_id" : ObjectId("585db64a483ab4f778a635c0"), "datetime" : ISODate("2016-12-23T23:42:02.032Z"), "temperature" : 19, "humidity" : 23 }]
Также я получаю пустой массив
Спасибо :)
Я все еще получаю пустой массив. Считаете ли вы, что мои 'datetime' и' interValue' неуместны? – Ekom
'setHours()' в datetime с заданным интервалом приводит к дате, которая на 100 лет превышает сегодняшнюю дату. Отрегулируйте расчет дат в соответствии с вашими требованиями. Пожалуйста, 'console.log' время и время до запроса, чтобы проверить, передаются ли правильные значения или нет. –
Ты прав. Мое время было не так. Однако, как вы думаете, что я должен сделать, чтобы добавить интервалы времени? – Ekom