mongodb聚合:如何将分钟添加到日期字段,然后进行比较

时间:2018-08-08 08:49:55

标签: javascript node.js mongodb aggregation-framework

我要进行复杂的查询。

我正在构建一个电影应用程序。 我想对一个新节目进行验证检查。 它将检查放映时间是否在同一剧院内播放的其他放映时间范围内。 为了知道该范围的结束时间,我需要将电影的分钟数添加到电影的开始时间。

重要注意事项:新的表演时间尚未存储在数据库中。因此它处于不同的时区(比方说+2)。因此,当我们比较日期时,我们也应同时适用不同的时区。 我将新节目的时间更改为utc,所以我想它可以解决问题。

这是我尝试运行的代码。显然是行不通的。我不知道可以将电影的“持续时间”添加到电影的开头:

router.post("/", (req, res) => {
if (!req.body)
    return res.sendStatus(400);
let show = new Show(req.body);
startDateTime= moment.utc(show.dateTime);
console.log('startDateTime in utc');
console.log(startDateTime);
Show.aggregate([
    //next stage: add movies details
    {
        "$match": {
            "dateTime": { $gte: new Date(startDateTime)},
            "_TheaterId": show._TheaterId  
        }
    },
    {
        $lookup:
            {
                from: 'movies',
                localField: '_MovieId',
                foreignField: '_id',
                as: 'MovieDetails'
            }
    },
    {
        $unwind: "$MovieDetails"
    },
    {
        "$match": {
            { $add: [ "$dateTime", $MovieDetails.durationInMin * 60000 ] }: { $lte: new Date(startDateTime)} 
        }
    }

], function (err, result) {
    if (err) {
        //next(err);
        return res.json(err);
    } else {
        res.json(result);
    }
});

任何人都知道如何将分钟添加到日期字段,然后将其与其他日期进行比较?

非常感谢!

这是Db的图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

此刻提供了add function

因此,假设您的 startDateTime 瞬间对象

  

startDateTime.add(20,'minutes');