node.js - 如何按运动名称过滤

标签 node.js mongodb mongoose mongodb-query

我正在开发一个应用程序,我必须按运动名称进行过滤。我是 在后端使用 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);
        })
});

这是文档。我想按体育名称搜索用户

[  
   {  
      "_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

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

正如其他人在评论中提到的,您应该使用 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 的东西 - 您将在保存文档时创建它 (例如将“Lawn Tennis”转换为“lawn-tennis”)

然后查询

关于node.js - 如何按运动名称过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887295/

相关文章:

python - KeyError : 'pop from an empty set' when connecting to a Mongodb replica set (motor, pymongo, Tornado )

node.js - 无法确定 Mongoose SSL 与 DocumentDB 的连接错误

node.js - 更新mongoDB文档需要两次

node.js - 如何替换/覆盖环回 API 资源管理器 Logo 名称?

node.js - 使用 pngjs 从缓冲区中读取图像

javascript - 在express.js中解析服务器中的html值

MongoDB $project 将文档嵌入到根级别,并在另一个文档中包含其他字段

node.js - 混淆使用 aws 发送短信 [更新 : sms is delivered soo late]

javascript - 在对象数组中查找,就像在单独的集合中一样

node.js - MongoDB将相关的收集项目计数与其他收集结果合并