为什么不从mongodb数据库中删除文档?

时间:2019-02-14 06:16:23

标签: node.js mongodb

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

URL
    http://localhost:7000/delete/5c641f44923cf17c1cfe1002

控制台

{ _id: '5c641f44923cf17c1cfe1002' }
1 document deleted

Server.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罗盘社区中的样子。

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

1 个答案:

答案 0 :(得分:3)

您应该将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 docs具有deletedCount