首页 > 解决方案 > 如何用 Node.js 变量替换 Mongo 查询参数

问题描述

我有一个使用 Node.js 的 MongoDb 获取请求。我想用变量(req.query.pauseTime)替换查询中的两个值。我怎么做。该代码适用于数字,但不适用于普通变量。

我努力了

let min = req.query.pauseTime -120;
let max = req.query.pauseTime + 120;

然后尝试用 {"$gte": min, "$lte": max} 替换 {"$gte": 6, "$lte": 12}

使用 6 和 12 时,我回来了

 [ { _id: 6, count: 5 },
  { _id: 7, count: 8 },
  { _id: 9, count: 8 },
  { _id: 10, count: 2 },
  { _id: 12, count: 8 },
  { _id: 8, count: 7 },
  { _id: 11, count: 8 } ]

用变量替换时,我得到一个空数组。

在以下代码中:

videoCommentsRoutes.route('/count').get(function (req, res) {
    VideoComments.aggregate([ {"$match": {"pauseTime": {"$gte": 6, "$lte": 12} } },
        {"$group" : {_id:"$pauseTime", count:{$sum:1}}}
    ]).exec(function (err, commCount){
        if(err){
            console.log(err);
        }
        else {
            res.json(commCount);
        }
    });
});

那么,如何用变量替换数字 6 和 12?

标签: mongodb

解决方案


像这样尝试,使用带有 pauseTimeQuery 变量的相同查询

videoCommentsRoutes.route('/count').get(function (req, res) {
     let min = Number(req.query.pauseTime) - 120;
     let max = Number(req.query.pauseTime) + 120;

     const pauseTimeQuery = {
         "$gte": Number(min), 
         "$lte": Number(max)
       }    

VideoComments.aggregate([ {"$match": {"pauseTime": pauseTimeQuery } },
        {"$group" : {_id:"$pauseTime", count:{$sum:1}}}
    ]).exec(function (err, commCount){
        if(err){
            console.log(err);
        }
        else {
            res.json(commCount);
        }
    });
});
}

推荐阅读