【问题标题】:How to delete document by _id using MongoDB and Jade (Express.js)?如何使用 MongoDB 和 Jade (Express.js) 按 _id 删除文档?
【发布时间】:2016-02-20 05:19:48
【问题描述】:

我已经成功地使用 mongodb 建立了一个数据库,并且我已经设法将新条目添加到我的集合中。但是,当我使用类似的方法删除时,什么也没有发生。

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

【问题讨论】:

    标签: javascript node.js mongodb express pug


    【解决方案1】:

    我想通了。这是我使用 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”的页面,该页面列出了集合中的每个项目。

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

    只要我保持 Jade 的缩进满意,这对我有用 :)

    【讨论】:

      【解决方案2】:

      试试这个,看看它是否有效:

      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 本机驱动程序,因此您不需要在 ObjectId 中编组 _id。可以直接将_id指定为string

      【讨论】:

      • 我更新了我的快递代码,但仍然没有得到回应。我发现错误在我的玉文件中。我不得不取消缩进表格行。但是,现在表单正在执行,我收到 /deleteproject 的 404 Not Found 错误。有什么想法吗??
      猜你喜欢
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2018-10-27
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多