如何通过_id使用MongoDB和Jade(Express.js)删除文档?

我已经成功地使用MongoDBbuild立了一个数据库,并且设法添加了新的条目到我的集合中。 但是,当我使用类似的方法来删除,没有任何反应。

Express.js代码

router.post('/deleteproject', function(req, res) { var MongoClient = mongodb.MongoClient; var url = 'mongodb://localhost:27017/plugd'; MongoClient.connect(url, function(err, db) { if (err) { console.log("Unable to connect to server", err); } else { console.log('Connected to server'); var collection = db.collection('projects'); collection.remove( {_id: new mongodb.ObjectID(req.body)}, function(err, result) { if (err) { console.log(err); } else { res.redirect("thelist"); } db.close(); }); } }); 

});

玉代码

 h2. ul Projects each project, i in projectlist #project_list_item a(href='#') #{project.owner} - #{project.project} p #{project.ref1} p #{project.ref2} p #{project.ref3} form#form_delete_project(name="deleteproject", method="post", action="/deleteproject") input#input_name(type="hidden", placeholder="", name="_id", value="#{project._id}") button#submit_project(type="submit") delete 

我想到了。 这里是我使用express.js中的路由器从mongodb集合中删除数据的修复。

Express.js

  router.post('/deleteproject', function(req, res) { var MongoClient = mongodb.MongoClient; var ObjectId = require('mongodb').ObjectId; var url = 'mongodb://localhost:27017/app'; MongoClient.connect(url, function(err, db) { if (err){ console.log('Unable to connect to server', err); } else { console.log("Connection Established"); var collection = db.collection('projects'); collection.remove({_id: new ObjectId(req.body._id)}, function(err, result) { if (err) { console.log(err); } else { res.redirect("thelist"); } db.close(); }); } }); }); 

玉代码

 extends layout block content h2. Projects ul each project, i in projectlist #project_list_item a(href='#') #{project.owner} - #{project.project} p #{project.ref1} p #{project.ref2} p #{project.ref3} form#form_delete_project(name="deleteproject", method="post", action="/deleteproject") input#input_name(type="hidden", placeholder="", name="_id", value="#{project._id}") button#submit_project(type="submit") delete 

jade文件正在渲染到一个名为“thelist”的页面,列出集合中的每个项目。

表单部分处理列表中每个项目的删除function。

只要我保持Jade的缩进快乐,这对我很有用:)

试试这个,看看它是否工作:

 router.post('/deleteproject', function(req, res) { var MongoClient = mongodb.MongoClient; var url = 'mongodb://localhost:27017/plugd'; MongoClient.connect(url, function(err, db) { if (err) { console.log("Unable to connect to server", err); } else { console.log('Connected to server'); var collection = db.collection('projects'); collection.remove( {_id: req.body}, function(err, result) { if (err) { console.log(err); } else { res.redirect("thelist"); } db.close(); }); } }); }); 

由于你在MongoDB的Node.js本地驱动程序,你不需要marshall _id在ObjectId。 您可以直接指定_id作为string