【问题标题】:My document is not getting deleted in mongodb in nodejs我的文档没有在 nodejs 的 mongodb 中被删除
【发布时间】:2020-04-05 08:44:28
【问题描述】:

我的文档没有从集合中删除。我也没有收到任何错误。 http事务非常好。

// Node Module dependencies
var express = require('express');
var router = express.Router();

// Local Module dependencies
var common = require('./common.js');
//var request = require('request');


var db =common.conn;
var Question = require('../model/questions');


router.route('/postquestion')
    .post(function (req, res) {

        var item = new Question(req.body);
        //console.log(item);

        //=======calling postdata method=====//
        postQuestion(item, function (result) {

            res.json(result);
        });

    });

router.route('/deletequestion')
    .delete(function (req, res) {
    console.log(req.body._id);

    Question.collection.deleteOne({_id:req.body._id},function(err,question){
        if(err) throw err;
        console.log('the document is deleted')
        res.send(question);

    });

})
function postQuestion(item, fn) {
    item.save(function (err) {
        if (err) console.log(err);
        fn(item);
    });
}
module.exports = router;

postquestion 功能运行良好,数据库正在更新。当我使用邮递员提出删除请求并发送以下 json 时。

{
    "_id": "57bc442c4925180b067f075b"
}

我收到如下回复。

   {
   "ok": 1,
   "n": 0
   }

当我检查 robomongo 中的数据库时,我看到文档没有被删除。我是否错过了一些事情要做。还有什么事情要做吗......!

【问题讨论】:

  • console.log(req.body._id); ?如果undefined,则使用body-parser
  • no req.body._id 不是未定义的,它使用不带引号的 id 值记录......

标签: node.js mongodb mongoose


【解决方案1】:

MongoDB 使用 ObjectID 来索引文档。

如果你想使用 Mongo ID 删除对象,你必须实例化一个 ObjectID。

https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/

var ObjectID = require('mongodb').ObjectID;
router.route('/deletequestion')
    .delete(function (req, res) {
    console.log(req.body._id);
    const _id = new ObjectID(req.body._id);
    Question.collection.deleteOne({_id:_id},function(err,question){
        if(err) throw err;
        console.log('the document is deleted')
        res.send(question);

    });

})

【讨论】:

  • 有关如何执行此操作的任何指针...我尝试将输入发送为 "_id": ObjectId("57bc442c4925180b067f075b") 但它没有接受它 { "message": "Unexpected token O" , "错误": { "body": "{\n \"_id\": ObjectId(\"57bc442c4925180b067f075b\")\n}", "status": 400, "statusCode": 400 } }
  • 成功了....非常感谢...所以在节点中,一切都高度依赖于对象的格式或原型.....以正确的格式发送数据也很重要很多......所以我怎样才能知道那个地方需要什么形式的数据......
【解决方案2】:

如果没有任何效果,请尝试以下操作...

   app.delete("/api/posts/:id",(req,res,next)=> 
{  
   Post.deleteOne({_id: req.param.id})
   .then(result=>{
     console.log(result);
   });
   //console.log('Post Deleted on node JS');
   res.status(200).json({message: 'Delete'}); 

});

【讨论】:

    【解决方案3】:

    如果你使用的是 MongooseJS,你只需要做 Question.deleteOne({...}), you don't need to do theQuestion.collection...` 的事情。除非你的模型中有不同的连接方式

    【讨论】:

    • 我试过了,但它说 Question.deleteOne 不是一个函数......!但我的版本运行没有错误...
    • 这是我如何用猫鼬连接模型...... conn 包含以这种方式连接的连接 conn: require('mongoose').createConnection(process.env.MONGOLAB_URI || 'mongodb://localhost:27017/medicoshere') var Question = common.conn.model('Question', questionSchema); module.exports = 问题;
    • 我想如果你只是做一个var mongoose = require('mongoose');,那么你可以用mongoose.connect(<url>);设置你的连接,你可以用mongoose.model()创建你的模型。然后导出将可以访问全套 Mongoose 函数(包括 deleteOne),您不必对 ObjectID 做任何额外的事情,只需传入 ID 字符串即可。
    • 我想这也很大程度上取决于您使用的是什么版本的 MongooseJS。
    • 举个例子,这是他们在 MongooseJS 网站上演示一个非常基本的设置的方式:var mongoose = require('mongoose');mongoose.connect('mongodb://localhost/test');var Cat = mongoose.model('Cat', { name: String });var kitty = new Cat({ name: 'Zildjian' });kitty.save(function (err) {if (err) {`console.log (err);` ` } else {` `console.log('meow');` }` });
    猜你喜欢
    • 2016-02-28
    • 2019-08-22
    • 1970-01-01
    • 2013-03-09
    • 2016-12-05
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多