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

Posted

技术标签:

【中文标题】findById 返回文档列表而不是单个结果【英文标题】:findById returning a list of documents instead of a single result 【发布时间】:2019-12-09 22:52:14 【问题描述】:

我试图通过它的对象 ID 从 mongodb 获取一个项目对象,但是当我尝试在邮递员中调用该路由时,它给了我数据库中每个对象的列表(总共 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

【问题讨论】:

【参考方案1】:

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

你的格式:

http://localhost:3000/events?id=someid

URL 中的id = someID 表示GET 查询参数。

如果你在路由中使用了像:id这样的通配符参数,那么请求的URL应该是:

http://localhost:3000/events/someid

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

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

谢谢

【讨论】:

@dave.. 这正是问题所在。或者,如果您不想更改路线结构,只需将 var id = req.params.id; 更改为 var id = req.query.id; @Narasimha Prasanna HN 我试过你的答案,它奏效了,谢谢你的帮助:) localhost:3000/events?id=someid 哦,顺便说一下,这个 url 是邮递员在我转到 params 选项卡并在 key 列中输入 id 并在 value 列中输入 itemid 时生成的【参考方案2】:

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

EventModel.findOne(id, callback)

【讨论】:

感谢您的帮助;)您的方法也对我有用

以上是关于findById 返回文档列表而不是单个结果的主要内容,如果未能解决你的问题,请参考以下文章

Swift NSPredicate 返回所有结果而不是单个结果

MongoDB 和 rmongodb。获取查找的大小而不是返回所有结果

Hibernate query.list() 方法返回空列表而不是空值

Spring Boot Mongo findById 返回 null

更新 findOne()/find()/findById() 返回的文档 - mongoose

更新 findOne()/find()/findById() 返回的文档 - mongoose