Bạn không truy vấn một ObjectId, bất kể bạn nghĩ mình là ai. Bạn đang truy vấn cho ObjectId được mã hóa dưới dạng chuỗi đặc biệt, điều này không điều tương tự. Đánh máy đúng cách và bạn có thể sẽ thành công hơn nhiều.
Đã chỉnh sửa để xây dựng chi tiết, từ một trình bao REPL mongo (JS):
> // Omitting the _id, or generating a new one, are equivalent during insert.
> db.foo.insert({_id: ObjectId()})
WriteResult({ "nInserted" : 1 })
> db.foo.find() // As expected, we get back our _real_ ObjectId value.
{ "_id" : ObjectId("5c9cfab873724727778c0730") }
> // Can we "insert the record again" using a string version of the ID?
> db.foo.insert({_id: "5c9cfab873724727778c0730"})
WriteResult({ "nInserted" : 1 }) // Sure as heck can! No unique violation!
> db.foo.find() // Because THESE ARE NOT THE SAME
{ "_id" : ObjectId("5c9cfab873724727778c0730") }
{ "_id" : "5c9cfab873724727778c0730" }
Sau cuộc thảo luận IRC của chúng tôi, dường như có khó khăn trong việc hiểu "các thuật ngữ có thể tìm kiếm" trong các câu trả lời mà bạn đang được cung cấp. Tìm kiếm tại đây trên StackOverflow (hoặc Google hoặc DDG) cho "mongoose typecast ObjectId" (không có dấu ngoặc kép; hoặc chỉ "mongoose ObjectId"…) và bạn sẽ tìm thấy nhiều câu trả lời, vì đây là vấn đề đặc biệt phổ biến đối với người dùng Mongoose.