将持续时间添加到日期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"
])
以上是关于将持续时间添加到日期mongodb中的主要内容,如果未能解决你的问题,请参考以下文章