如何在Node / MongoDB中过滤API的数据?

时间:2018-12-03 19:45:34

标签: node.js mongodb express mongoose

我正在尝试编写一个简单的API从数据库中获取产品。我想通过给定的特定参数来过滤此数据,这些参数是可选的:

-sanitizer=thread

我的控制器如下:

swiftc

}

但是,这仅适用于具有3个参数的URL。如何通过查询无参数,单参数和多参数的API灵活地从数据库获取数据?

1 个答案:

答案 0 :(得分:0)

因此,您无法真正做到完全那样的路由。 “可选”路线参数的概念不适用于路径参数。例如,您不能仅以现有方式搜索模型,如果要指定模型,则必须确定要输入类型和年份。

如果必须使用路径,则需要以粒度的相反顺序定义三个路由:

router.get('/articles/:type/:year/:model', api_controller.articles);
router.get('/articles/:type/:year', api_controller.articles);
router.get('/articles/:type', api_controller.articles);

由于未共享数据结构,因此不确定查询是否正确,但是通常如果尝试对null进行匹配,则mongodb会忽略该参数,因此我认为已经设置了该参数。

现在,如果是我,我根本不会在路径上匹配。相反,我只是使用查询字符串作为搜索参数,就像这样:

router.get('/articles', api_controller.articles);

然后在控制器中:

// now someone calls /articles?year=2017&type=whatever or could call /articles?model=some-name
exports.articles = async (req, res, next) => {
  const articles = await Article.find({
    'models': {
        $elemMatch: {
            'year': req.query.year,
            'category': req.query.type,
            'name': req.query.model,
        }
    }
  });
  res.send(articles);
}