Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb聚合:如何向日期字段添加分钟数,然后进行比较_Javascript_Node.js_Mongodb_Aggregation Framework - Fatal编程技术网

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

Javascript mongodb聚合:如何向日期字段添加分钟数,然后进行比较,javascript,node.js,mongodb,aggregation-framework,Javascript,Node.js,Mongodb,Aggregation Framework,我想做一个复杂的查询 我正在构建一个电影院应用程序。 我想做一个新节目的确认检查。 它将检查演出时间是否在同一剧院上演的另一场演出的范围内。 为了知道范围的结束时间,我需要将电影的分钟数添加到电影开始时间 重要注意事项:新的显示时间尚未存储在数据库中。所以它在不同的时区(比如+2)。因此,当我们比较日期时,我们也应该考虑不同的时区。 我把新节目的时间改为utc,所以我想它解决了这个问题 下面是我尝试运行的代码。显然,这是行不通的。我不知道是否可以将电影持续时间添加到电影开始: router.po

我想做一个复杂的查询

我正在构建一个电影院应用程序。 我想做一个新节目的确认检查。 它将检查演出时间是否在同一剧院上演的另一场演出的范围内。 为了知道范围的结束时间,我需要将电影的分钟数添加到电影开始时间

重要注意事项:新的显示时间尚未存储在数据库中。所以它在不同的时区(比如+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的图片:

这是由瞬间提供的

因此,假设您的startDateTime是一个时刻对象

startDateTime.add(20,'分钟')


试试这个
{“$match”:{“$expr”:{$lte:[{$add:[“$dateTime”,{$multiply:[“$MovieDetails.durationInMin”,60000]}},新的日期(startDateTime)]}}
你能不能发布你的实际数据而不是屏幕快照?我知道问题出在哪里。你的答案很完美,但在我最初的查询中,我不得不在“lte”和“gte”之间切换