mongoose中根据_id删除数据,_id多出一对引号问题

在自己写的项目中的代码如下:

_id在mongodb中的数据类型是object  使用模板展示后,将其转换为类型。

 <a href="/article/delete?id={{$value._id}}" class="btn btn-info btn-border btn-round btn-sm mr-2">
 删除
</a>

根据mongoose中的_id删除某个文章,如上图所示。

// 删除文章
articleSchema.static('deleteById',function(id,callback){
    this.deleteOne({
        _id:id,
        // _id:"5e4d32a116b7423900835e03"
    },function(err){
        callback(err)
    })
})

如上图所示定义了一个deleteById的静态方法(deleteOne为mongoose中提供的方法),当路由为/article/delete的时候调用这个方法,调用如下图所示:

// 删除文章
router.get('/article/delete',function(req, res){
    Article.deleteById(req.query.id,function(err){
        if(err){
            return res.status(500).send('Server error.')
        }else{
            console.log("删除成功")
            res.redirect("/")
        }
    })
})

当通过点击<a>链接删除某个文章时,发现删除不成功。

在调试过程中将上述第二段代码中的 _id:id中的id改为一个确定的"5e4d32a116b7423900835e03",发现可以删除成功。那么问题显而易见id不正确。

this.deleteOne({
        _id:id, //这里并不是"5e4d32a116b7423900835e03",而是' "5e4d32a116b7423900835e03" '
        // _id:"5e4d32a116b7423900835e03"
    },function(err){
        callback(err)
})

将其打印出来发现   

_id:id, //这里并不是"5e4d32a116b7423900835e03",而是' "5e4d32a116b7423900835e03" '(多了一对引号)。

解决办法:

改为: ?id={{$value._id.toString()}}

<a href="/article/delete?id={{$value._id.toString()}}" class="btn btn-info btn-border btn-round btn-sm mr-2">
 删除
</a>

 

这篇文章可以参考,写的非常好:

https://www.jianshu.com/p/5cf15aacb3bf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章