У меня есть это поле в collection
в базе данных в MongoDB Atlas .
created_at : 2019-10-09T10:55:00.202+00:00
Как создать запрос в API Node Express для возврата данных по часам в соответствии с полем created_at
?
Например, за час до этого времени.
Я решил это, выполнив это, где -3 - местный UTC:
var now = new Date();
var ago = new Date();
ago.setHours(now.getHours() - 3 - hour_range);
mymodel.find({device: req.params.device_id, created_at: {$gte : ago, $lt : now} }).exec(function (err, measures) {
if (err)
res.send(err);
res.json({
message: 'listing...',
data: measures
});
});
SegГєn ты комментируешь, что со мной случается, он состоит в том, чтобы группировать документы на основании часа, я показываю возможную одну тебе soluciГіn:
[
{
"info": "uno",
"created_at": ISODate("2016-04-30T13:00:00Z")
},
{
"info": "dos",
"created_at": ISODate("2016-04-30T14:00:00Z")
},
{
"info": "tres",
"created_at": ISODate("2016-04-30T05:00:00Z")
},
{
"info": "cuatro",
"created_at": ISODate("2016-04-30T05:00:00Z"),
}
]
db.collection.aggregate([
{
$group: {
_id: {
$hour: "$created_at" // Identificador unico
},
data: {
$push: "$ROOT" // Añade todos los documentos con esa hora en un campo 'data'
}
}
}
])
[
{
"_id": 5,
"data": [
{
"_id": ObjectId("5a934e000102030405000002"),
"created_at": ISODate("2016-04-30T05:00:00Z"),
"info": "tres"
},
{
"_id": ObjectId("5a934e000102030405000003"),
"created_at": ISODate("2016-04-30T05:00:00Z"),
"info": "cuatro"
}
]
},
{
"_id": 13,
"data": [
{
"_id": ObjectId("5a934e000102030405000000"),
"created_at": ISODate("2016-04-30T13:00:00Z"),
"info": "uno"
}
]
},
{
"_id": 14,
"data": [
{
"_id": ObjectId("5a934e000102030405000001"),
"created_at": ISODate("2016-04-30T14:00:00Z"),
"info": "dos"
}
]
}
]
db.collection.aggregate([
{
$group: {
_id: {
$hour: "$created_at" // Identificador unico
},
data: {
$push: "$ROOT" // Añade todos los documentos con esa hora en un campo 'data'
}
}
},
{
$match: {
_id: 5 //Filtramos por el campo donde se agrupan las horas
}
}
])
[
{
"_id": 5,
"data": [
{
"_id": ObjectId("5a934e000102030405000002"),
"created_at": ISODate("2016-04-30T05:00:00Z"),
"info": "tres"
},
{
"_id": ObjectId("5a934e000102030405000003"),
"created_at": ISODate("2016-04-30T05:00:00Z"),
"info": "cuatro"
}
]
}
]
db.collection.aggregate([
{
$addFields: { //Añade un campo 'convertedDate'
convertedDate: { $toDate: "$created_at" } //Tranforma el campo 'created_at' en un formato fecha
}
},
{
$group: {
_id: {
$hour: "$convertedDate" // Identificador unico
},
data: {
$push: "$ROOT" // Añade todos los documentos con esa hora en un campo 'data'
}
}
},
{
$match: {
_id: 5 //Filtramos por el campo donde se agrupan las horas
}
}
])
Подождал, что он возможный soluciГіn, я помог тебе решать проблему.