将持续时间添加到日期mongodb中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将持续时间添加到日期mongodb中相关的知识,希望对你有一定的参考价值。

我尝试学习与mongodb和nodejs一起工作,但遇到了问题。我在mongoDB中有一个名为Schedule的表,其字段ID为start和end。对于特定的行,我想为开始时间添加一个持续时间,只要开始时间小于结束时间即可。

例如我在计划表中有该行:


   "_id": "123", 
   "start": "2020-03-11T09:00:00.000Z", 
   "end": "2020-03-11T18:00:00.000Z"
 

持续时间参数30分钟(30x60x1000ms)。我想获得以下结果:

[
 "id":1, "time":"2020-03-11T09:00:00.000Z", 
 "id":2, "time":"2020-03-11T09:30:00.000Z", 
 "id":3, "time":"2020-03-11T10:00:00.000Z", 
 "id":4, "time":"2020-03-11T10:30:00.000Z",   
 "id":5, "time":"2020-03-11T11:00:00.000Z",
 ...
 "id":n, time:"2020-03-11T18:00:00.000Z
]

我尝试使用$ add聚合,但是我仅获得第一行。

const idSchedule = req.params;
const duration = req.body;
const durationMs = duration*60*1000;
console.log('duration',duration);
objId = new ObjectID(idSchedule); 
Schedule.aggregate([
    "$match":
        "_id": objId,
        
    ,
    $project:  _id: 1, time:  $add: [ "$start", durationMs ]   
]).then((response) => 
    res.send(response)
)

我得到的只是:

[
 
    "_id": "5e68ebf0992e173a28e7dd46",
    "time": "2020-03-11T09:30:00.000Z"
 
]

非常感谢!

答案

您使用此一个:

db.collection.aggregate([
   
      $set: 
         interval: 
            $let: 
               vars: 
                  size: 
                     $divide: [ $subtract: ["$end", "$start"] ,  $multiply: [1000, 60] ]
                  
               ,
               in: 
                  $map: 
                     input:  $range: [0,  $add: ["$$size", 1] , 30] ,
                     in: 
                        id:  $add: [ $divide: ["$$this", 30] , 1] ,
                        time:  $add: ["$start",  $multiply: [1000, 60, "$$this"] ] 
                     
                  
               
            
         
      
   ,
    $unwind: "$interval" ,
    $replaceRoot:  newRoot: "$interval"  
])

Mongo playground

以上是关于将持续时间添加到日期mongodb中的主要内容,如果未能解决你的问题,请参考以下文章

如何在插入时自动将服务器日期添加到文档中?

使用 MongoDB 和 Nodejs 插入和查询日期

在 MongoDB 聚合中添加缺失的日期

从对象 id 中提取日期并将其导出到 mongodb 中的 csv

如何拦截和记录 mongodb 查询? [复制]

MongoDB 按 ID 分组,然后按日期分组