如何在 Mongodb 中获取时间(上午 10 点到上午 11 点)之间的数据

问题描述 投票:0回答:1

如何在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},
})

你能帮忙解决这个问题吗,如何在这种情况下获取数据的最后几分钟。

javascript mongodb mongodb-query aggregation-framework
1个回答
0
投票

您可以通过以下方式获得所需的输出:

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"
        }
      }
    }
  }
])
© www.soinside.com 2019 - 2024. All rights reserved.