MongoDB调用deleteOne()删除文档返回{acknowledged:true,deletedCount:0}但ID正确
MongoDB删除文档返回deletedCount:0的问题解决
问题场景
尝试从MongoDB数据库中删除单个文档时,操作返回{acknowledged: true, deletedCount: 0},确认状态为true但无文档被删除,且传入的_id是正确的。
客户端代码
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 }); const run = async()=> { try{ const productCollection =client.db('productCMS').collection("AllProducts") // Read One app.get('/products/:id', async(req, res) => { const id= req.params.id const query ={_id: ObjectId(id)} const result= await productCollection.findOne(query) console.log(result) res.send(result) }) // Read All app.get('/products', async(req, res) => { const query ={} const cursor=productCollection.find(query) const result= await cursor.toArray() console.log(result) res.send(result) }) // write app.post('/products', async(req, res) => { const products= req.body const result= await productCollection.insertOne(products) console.log(result) res.send(result) }) // DELETE app.delete('/products/:id', async(req, res)=> { const id = req.params._id console.log(id) const query= {_id: ObjectId(id)} const result= await productCollection.deleteOne(query) console.log(result) res.send(result) }) }finally {} } run().catch(err=>console.log(err)) app.get('/' , (req, res)=> { res.send('The sever is Running....') }) app.listen(port, ()=> { console.log('Server Port', port) })
问题原因与解决方法
问题出在DELETE接口的参数获取逻辑上:
- 路由定义为
/products/:id,说明URL中传递的参数名是id,需通过req.params.id获取 - 但代码中错误使用了
req.params._id,导致id变量值为undefined,生成的查询条件{_id: ObjectId(undefined)}无法匹配任何文档,因此删除计数为0
修正后的DELETE接口代码:
// DELETE app.delete('/products/:id', async(req, res)=> { const id = req.params.id // 改为req.params.id console.log(id) const query= {_id: ObjectId(id)} const result= await productCollection.deleteOne(query) console.log(result) res.send(result) })
内容的提问来源于stack exchange,提问作者Moniruzzaman Sujon
相关产品推荐
相关产品推荐

