如何在mongodb中获取小时时间戳之间的数据。
我有这些类型的文件。
{
_id: 1,
"timestamp": "2023-05-15T10:00:00Z"
"energy": 2333
},
{
_id: 2,
"timestamp": "2023-05-15T10:10:00Z"
"energy": 2340
},
{
_id: 3,
"timestamp": "2023-05-15T10:30:00Z"
"energy": 2349
},
{
_id: 4,
"timestamp": "2023-05-15T10:40:00Z"
"energy": 2355
},
{
_id: 5,
"timestamp": "2023-05-15T10:50:00Z"
"energy": 2360
},
{
_id: 6,
"timestamp": "2023-05-15T11:00:00Z"
"energy": 2370
}
我想合并上午 10:00 到上午 11:00 的数据,我写了一个查询,但它采用的是上午 10:00 到上午 10:50 的文档字段,而不是上午 11:00 的文档。
{
"$project": {"energy": 1,"dateparts": {"$dateToParts": {"date": "$timestamp}}}},
"$group": {"activeEnergy": {$push: {"minute":"$dateparts.minute", "energy": "$activeEnergy"}}
}
这个查询输出:
(
{
"_id": {
year: 2023
month: 5
day: 15
hour: 10
}
"activeEnergy": [
{ minute: 0, energy: 2333},
{ minute: 10, energy: 2340},
{ minute: 30, energy: 2349},
{ minute: 40, energy: 2355},
{ minute: 50, energy: 2360},
})
但是不是从10:50到11:00拿文件
{ minute: , energy: 2370},
要求输出:
(
{
"_id": {
year: 2023
month: 5
day: 15
hour: 10
}
"activeEnergy": [
{ minute: 0, energy: 2333},
{ minute: 10, energy: 2340},
{ minute: 30, energy: 2349},
{ minute: 40, energy: 2355},
{ minute: 50, energy: 2360}
{ minute: 59, energy: 2370},
})
你能帮忙解决这个问题吗,如何在这种情况下获取数据的最后几分钟。
您可以通过以下方式获得所需的输出:
db.collection.aggregate([
{
$match: {
timestamp: {
$gte: ISODate("2023-05-15T10:00:00Z"),
$lt: ISODate("2023-05-15T11:00:00Z")
}
}
},
{
$project: {
year: { $year: "$timestamp" },
month: { $month: "$timestamp" },
day: { $dayOfMonth: "$timestamp" },
hour: { $hour: "$timestamp" },
minute: { $minute: "$timestamp" },
energy: "$energy"
}
},
{
$group: {
_id: {
year: "$year",
month: "$month",
day: "$day",
hour: "$hour"
},
activeEnergy: {
$push: {
minute: "$minute",
energy: "$energy"
}
}
}
}
])