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