删除错误.MongooDB + Express.传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符

Deleting with error. MongooDB + Express. Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

本文关键字:字符 字节 单个 字符串 十六进制 MongooDB 错误 Express 参数 删除      更新时间:2023-09-26

使用mongodb和monk。我正在尝试删除记录,但不断收到错误:错误:传入的参数必须是 12 个字节的单个字符串或十六进制格式的 24 个十六进制字符的字符串我尝试过的不同代码:

 router.get('/delete/:id', function(req, res) { 
    var db = req.db;
    var uid = req.params.id.toString();
    var collection = db.get('usercollection');
    collection.remove({"_id":uid}, function(err, result) { 
        if(result === 0){
            res.send("There was a problem delete the information to the database.");
        }
        else{
            res.location("list");
            res.send(res.redirect("list"));
        }
    });
    });
    module.exports = router;

这是玉石文件

   List
ul
    each event, i in list
        li
            #{event.id} : #{event.text}
            a(href="/delete/#{event._id}") Delete

由于您获取的id为字符串,因此您必须使用ObjectID(uid)将字符串转换为mongodb对象,因为"_id"仅接受mongo对象。你可以使用试试这个

router.get('/delete/:id', function(req, res) { 
    var db = req.db;
    var uid = req.params.id.toString();
    var collection = db.get('usercollection');
    collection.remove({"_id":ObjectID(uid)}, function(err, result) { 
        if(result === 0){
            res.send("There was a problem delete the information to the database.");
        }
        else{
            res.location("list");
            res.send(res.redirect("list"));
        }
    });
    });
    module.exports = router;

链接来自传入的参数必须是 24 个十六进制字符的字符串 - 我认为它是

就我而言,这奏效了:

var myId = JSON.parse(req.body.id);
    collection.findOne({'_id': ObjectID(myId)}, function(error,doc) {
    if (error) {
      callback(error);
    } else {
       callback(null, doc);
    }
});