【问题标题】:Error while fetching documents from a collection in MongoDB从 MongoDB 中的集合中获取文档时出错
【发布时间】:2014-11-15 18:37:45
【问题描述】:

我正在开发一个必须按运动名称过滤的应用程序。我是 在后端使用 Node.js 和 MongoDB。

这是我的代码:-

router.route('/user/:_id/explore/:sportsname')

.get(function(req, res){


var query = Host.find();

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

    query.exec(function(err, explore){
            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
   }
]

当我在那个时间运行时,它给出了一个错误。错误如下:-

TypeError: path must be a string at Query.where 
(/node/node-api-master/node_modules/mongoose/lib/query.js:593:11) 
at Object.handle (/node/node-api-master/server.js:202:19) at next_layer 
(/node/node-api-master/node_modules/express/lib/router/route.js:103:13) 
at Route.dispatch (/node/node-api-master/node_modules/express/lib/router/route.js:107:5) 
at /node/node-api-master/node_modules/express/lib/router/index.js:195:24 
at param (/node/node-api-master/node_modules/express/lib/router/index.js:268:14) 
at param (/node/node-api-master/node_modules/express/lib/router/index.js:280:16) 
at param (/node/node-api-master/node_modules/express/lib/router/index.js:280:16) 
at Function.proto.process_params 
(/node/node-api-master/node_modules/express/lib/router/index.js:296:3) 
at next (/node/node-api-master/node_modules/express/lib/router/index.js:189:19)

【问题讨论】:

  • 您可以编辑您的问题以显示Host 架构定义吗?
  • 我认为这是因为您的代码中存在语法问题,请检查并检查警告

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

这是一个语法问题,这是您尝试做的正确实现:

router.get('/user/:_id/explore/:sportsname', function(req, res, next) {
  return Host.find({ sportsname: req.params.sportsname }, function(err, users) {
    if (err) return next(err);
    console.log(users);
    return res.json(users);
  });
});

请注意,没有必要检查req.params.sportsname 是否存在,因为如果不存在,您的路线将永远无法到达。如果您想将此参数设为可选,请使用以下代码:/user/:_id/explore/:sportsname?(在您的参数后添加问号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2020-08-17
    相关资源
    最近更新 更多