mongoose findByIdAndDelete / findOneAndRemove不删除

时间:2017-07-19 14:20:11

标签: node.js mongodb mongoose

我使用基本表单从mongodb创建/删除信息。 当我提交表单时,我可以创建足够好的记录,但是当我尝试删除记录时,我一直收到此错误:

     Cast to ObjectId failed for value " 596f5d7770f6f0d0c2767d3f" at 
path "_id" for model "dwb_notes"

我环顾四周,我在这里看到的大多数答案都说明了运行的应用程序的多个实例或在同一个端口上运行的多个程序等,以及其他不直接相关的解决方案对我的问题(我认为),但我已经尝试过它们无论如何也无济于事。

我现在只在db中有一条记录用于测试。这是我的模特:

function todoNotesModel(){
    const mongoose = require("mongoose");
    const Schema = mongoose.Schema;

    const NotesSchema = new Schema({
        todoCompany : String,
        todoIsFor : String, 
        todoPostedBy : String,
        todoCompleted : Boolean,
        todoPriority : String,
        todoMessages : Array,
        todoTitle : String,    
        todoDate : String
    });

    const NotesModel = mongoose.model("dwb_notes", NotesSchema);

    return NotesModel;
}

module.exports = todoNotesModel();

使用另一个html表单,在加载时,为删除按钮分配文档ID (在本例中为其596f5d7770f6f0d0c2767d3f),并将其附加到删除按钮。 在提交时,此ID通过以下方式传递到删除路由:

app.delete("/notesapi/:tabID", (request, response) => {
    NotesModel.findByIdAndRemove(request.params.tabID, (error, data)=>{
        if(error){
            console.log("error in deleting yo!");
            throw error;
        } else {
            console.log("data all gone and deleted yo");
            response.status(204);

        }
    });
});

当我运行:db.dwb_notes.find().pretty()

我回来了:

"_id" : ObjectId("596f5d7770f6f0d0c2767d3f"),
"todoCompany" : "",
"todoIsFor" : "",
"todoPostedBy" : "LOGGED IN USER HERE",
"todoCompleted" : false,
"todoPriority" : "green",
"todoTitle" : "",
"todoDate" : "Wed Jul 19 2017 09:23:56 GMT-0400 (Eastern Daylight Time)",
"todoMessages" : [
        ""
],
"__v" : 0

显示它在那里,所以我不明白为什么我得到这个错误。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

看起来您的错误是在MongoID字符串中打印出一个额外的空格。创建无效的MongoID字符串。

您可以使用:string.trim() Documentation

删除字符串之前或之后的任何空格。