来自mongodb匹配子句中路由的Express参数

时间:2017-08-23 19:51:30

标签: node.js mongodb express

我有一段不起作用的代码。我正试图从我的路线中获取价值。你可以看到我记录了req.param.val2的值,在我的情况下是1。

apiRoutes.get('/val1/:val2/:val3', function(req, res) {

console.log(req.params.val3);
console.log(req.params.val2);

val1.aggregate([
    {
        $match:
            {
                val2:req.params.val2
            }
    },
    {
        $sample:{size:1}
    }
],
    function(err, val1) {
        res.json(val);
    })
});

当我用值1替换req.params.val2时,就像这里:

$match:
{
  val2:1
}

代码有效。我想我犯了一个愚蠢的小错误,但我无法确切地指出究竟是什么。

谁可以? :)

2 个答案:

答案 0 :(得分:0)

我发现问题是什么,而且非常令人沮丧。

在mongodb中,我的文档设置如下

{
  "_id" : ObjectId("59199fc3d79317d2bc587659"),
  "text" : "some text",
  "level" : 1,
  "val3" : true,
  "val2" : false,
  "val4" : false,
  "val5" : false
}

不知何故,req.params.val2的值为1,但是键入String而不是Number / int。

可以通过将值转换为int或将数据库中的al值设置为String来解析。

答案 1 :(得分:0)

您可以尝试将字符串转换为整数,如下所示:

$match:
{
  val2 : parseInt(req.params.val2)
}