如何按sportsname过滤

时间:2014-11-12 12:42:03

标签: node.js mongodb mongoose mongodb-query

我正在开发一个应用程序,我必须按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);
        })
});

这是文件。我想通过sportsname

搜索用户
[  
   {  
      "_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
   }
]

当我在那个时候跑步时,它没有过滤。

1 个答案:

答案 0 :(得分:1)

首先,您使用的是req.query.sportsname

这是从查询字符串中获取参数。

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

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

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

然而,这是一个小问题

我看到的一个问题是您的<{p>中的sportsname中有空格/大小写

"sportsname":"Lawn Tennis",

但是你通过URL params传递这些内容 - “/ user / id / explore / Lawn Tennis”无效的有效网址,并且会被编码为“Lawn%20Tennis”

这方面的一个方法是使用decodeURIComponent -

因此,请尝试将查询更改为:

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

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

另一种方法是在文档中存储其他元素 -
像sportsnameslug之类的东西 - 您在保存文档时要创建的内容 (例如将“草地网球”改为“草地网球”)

然后查询