如何用sportsname过滤

我正在开发一个应用程序,我必须通过sportsname过滤。 我在后端使用Node.js和MongoDB。

这是我的代码:

router.route('/user/:_id/explore/:sportsname') .get(function(req, res, next){ var query = Host.find(); if(req.query.sportsname){ query.where({sportsname:req.query.sportsname}); } query.exec(function(err,sportsname){ if(err) return next(err); res.json(sportsname); console.log(sportsname); }) }); 

这是文件。 我想通过sportsnamesearch用户

 [ { "_id":"5460e2af4ee5216f17000061", "maxplayer":"1", "minplayer":"11", "date":"10 August 2014", "venue":"google", "time":"Afternoon", "sportsname":"Lawn Tennis", "__v":0 }, { "_id":"5460ff1b4ee5216f17000065", "maxplayer":"0", "minplayer":"9", "date":"10 October 2014", "venue":"google", "time":"Early Morning", "sportsname":"Cricket", "__v":0 }, { "_id":"5461a4014ee5216f17000089", "maxplayer":"4", "minplayer":"29", "date":"13 December 2014", "venue":"google", "time":"Afternoon", "sportsname":"Lawn Tennis", "__v":0 } ] 

当我在那个时候运行它不是过滤。

首先,你正在使用req.query.sportsname

这是为了从查询string中获取参数。

正如其他人在评论中提到的,你应该使用req.params.sportsname
另一种方法是使用`req.param('sportsname')

这将按照以下顺序查找参数:

  • req.params
  • req.body
  • req.query

不过,这是一个小问题

我看到的一个问题是在你的sportsname中有空格/大写

 "sportsname":"Lawn Tennis", 

但是你通过URL传递这些参数 – “/ user / id / explore / Lawn Tennis”不是一个有效的url,并且会被编码为“Lawn%20Tennis”

一种方法是使用decodeURIComponent

所以,请尝试更改您的查询:

 query.where({sportsname:decodeURIComponent(req.params.sportsname)}); 

(注意我使用req.params而不是req.query

另一种方法是在你的文档中存储一个额外的元素 –
像sportsnameslug的东西 – 你将在保存文件时创build(例如,将“草地网球”转换为“草坪网球”)

然后查询