我正在尝试从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"
答案 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
。