我正在尝试从 mongodb 数据库中删除文档,但它不起作用。我不明白为什么,因为控制台没有给出任何错误并正确显示查询对象。但是,当我查看数据库时,相应的文档仍然存在。

网址
http://localhost:7000/delete/5c641f44923cf17c1cfe1002

控制台

{ _id: '5c641f44923cf17c1cfe1002' } 
1 document deleted 

服务器.js:

const express = require('express'); 
const app = express(); 
const bodyParser = require('body-parser'); 
var urlencodedParser = bodyParser.urlencoded({ extended: false }); 
 
const MongoClient = require('mongodb').MongoClient; 
 
 
 
app.use(bodyParser.urlencoded({extended:true})); 
app.use(bodyParser.json()); 
// Connection URL 
const url = "mongodb://localhost:27017/DataBaseName"; 
 
app.listen(7000); 
 
app.set('view engine', 'ejs'); 
 
// Express routes 
 
//Default routes 
app.get('/', function(req, res){ 
 
    MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { 
        if (err) throw err; 
        var dbo = db.db("DataBaseName"); 
        dbo.collection("customers").find({}).toArray(function(err, result) { 
            if (err) throw err; 
            console.log(db); 
            db.close(); 
            res.render('index', {result:result}); 
        }); 
    }); 
}); 
//Submit button route 
app.post('/submitData',urlencodedParser,function(req, res){ 
 
    MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { 
      if (err) throw err; 
      var dbo = db.db("DataBaseName"); 
      dbo.collection("customers").insertOne(req.body, function(err, res) { 
        if (err) throw err; 
        console.log("1 document inserted"); 
        db.close(); 
      }); 
    }); 
    res.redirect("/"); 
}); 
 
 
// var _mongodb = require('mongodb'); 
//  var ObjectId = mongodb.ObjectId; 
 
app.get('/delete/:id', function (req, res) { 
    MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { 
      if (err) throw err; 
      var dbo = db.db("DataBaseName"); 
      dbo.collection("customers").deleteOne({_id: new ObjectId(req.params.id) }, function(err, res) { 
        if (err) throw err; 
        // console.log({_id: req.params.id}); 
        console.log("1 document deleted"); 
        db.close(); 
      }); 
    }); 
res.redirect("/"); 
}); 
 
// Catch all other routes 
app.get('*',function(req, res){ 
    res.send("You lost Niqqa!"); 
}); 

数据库中的条目 这就是 mongodb compass 社区中的样子。

_id:ObjectId("5c641f44923cf17c1cfe1002") 
name:"Please delete me" 
priority:"high" 

请您参考如下方法:

您应该将请求中的 id 转换为 ObjectId,因为它现在作为字符串传递,与文档不匹配。

const mongodb = require('mongodb'); 
const MongoClient = mongodb.MongoClient; 
const ObjectId = mongodb.ObjectId; 
 
app.get('/delete/:id', function (req, res) { 
    MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { 
      if (err) throw err; 
      var dbo = db.db("DataBaseName"); 
      dbo.collection("customers").deleteOne({_id: new ObjectId(req.params.id) }, function(err, res) { 
        if (err) throw err; 
        console.log({_id: req.params.id}); 
        console.log("1 document deleted"); 
        db.close(); 
      }); 
    }); 
res.redirect("/"); 

您还可以查看删除操作的结果,了解是否有文档被删除。该资源应具有基于 mongodb node driver docsdeletedCount .


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!