如何正确使用 findOne mongoDB 查询?
Posted
技术标签:
【中文标题】如何正确使用 findOne mongoDB 查询?【英文标题】:How to use the findOne mongoDB query correctly? 【发布时间】:2021-11-26 13:10:10 【问题描述】:我的目标是根据我标记为绿色的产品 ID(在我的 mongo DB 中的整个产品数组中)取回一个产品对象
我的后端条目如下所示:
router.get("/:id", async (req, res)=>
const mid=req.params.id;
console.log(mid)
const products = await Product.findOne( id: mid )
console.log(products)
if (products)
res.send(products);
else
res.status(404).send(message:"product not found")
);
Connsole.log(mid)
在第三行有效,它返回了正确的 id。但是,当我尝试根据第三行中的值过滤那个数组时,我总是会返回我的数据库的第一个对象,即 gopro 相机,而不是正确的对象。
输出如下:
632834528
_id: '5f9849daf641a82b257d529b',
id: 3484,
agentId: 66343,
title: 'GoPro Camera',
slug: 'gopro',
我做错了什么?
我也试过const products = await Product.find( id: mid )
,但它给了我整个数组而不是一个对象。
【问题讨论】:
【参考方案1】:我认为它正在返回一个查询。试试:
const products = await Product.findOne( id: mid ).exec();
【讨论】:
这也有效! 您认为哪种解决方案更好(下面是您的还是我的?)以及为什么? 我认为你根本不需要 expressAsyncHandler。有点奇怪,它竟然一开始就解决了你的问题【参考方案2】:这个解决方案对我有用: 我必须像这样使用 Expressasynchandler:
编辑:此解决方案可能不是最好的(请参阅上面答案中的 cmets)
router.get("/:id", expressAsyncHandler(async (req, res) =>
const mid=req.params.id;
const products = await Product.findOne( id: mid )
if (products)
res.send([products]);
else
res.status(404).send(message:"product not found")
));
【讨论】:
以上是关于如何正确使用 findOne mongoDB 查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongodb-native findOne() 中使用变量作为字段名?
为什么使用MongoDB中的findOne得到的是一个null呢
无法查询 findOne - SpringMVC MongoDB