findById返回文档列表,而不是单个结果

时间:2019-08-01 10:50:28

标签: node.js mongodb express mongoose postman

我试图从mongodb通过其对象ID获取一个项目对象,但是当我尝试在邮递员中调用该路由时,它给了我数据库中每个对象的列表(共4个对象),而不是预期一个对象。

这是我创建的用于从数据库中获取一个对象的函数

getEvent : function(id,callback)
{
   EventModel.findById(id,callback);
},

这是我的路线

router.get('/events/:id',function(req,res)
{
    var id = req.params.id;
    db.getEvent(id,function(err,event)
    {
        if(err)
        {
            console.log("Error processing data");
        }
        else{
            console.log("get one event is called");
            res.send(event)`enter code here`;
        }
    })
});

最后,下面是结果

Postman Test Result

2 个答案:

答案 0 :(得分:1)

代码正确,您提出请求的方式错误

您的格式:

http://localhost:3000/events?id=someid
URL中的

id = someID代表一个GET查询参数。

如果在路由中使用:id之类的通配符,则请求URL应为:

http://localhost:3000/events/someid

someid现在将出现在req.params.id

获得所有对象是因为在您的情况下变量idundefined,因此默认情况下会忽略未定义的参数。因此,它与调用相同: EventModel.findById({}, callback)

谢谢

答案 1 :(得分:0)

您可以尝试调用 Model.findOne()而不是 Model.findById

EventModel.findOne({id}, callback)