Anda tidak menanyakan ObjectId, tidak peduli seberapa banyak Anda berpikir. Anda menanyakan ObjectId yang dikodekan sebagai string heksadesimal, yang bukan hal yang sama. Ketik dengan benar dan kemungkinan besar Anda akan jauh lebih sukses.
Diedit untuk menguraikan, dari shell 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" }
Setelah diskusi IRC kami, tampaknya ada kesulitan dalam memahami "istilah yang dapat dicari" dalam jawaban yang Anda berikan. Cari di sini di StackOverflow (atau Google, atau DDG) untuk "luwak typecast ObjectId" (tanpa tanda kutip; atau hanya "luwak ObjectId"...) dan Anda akan menemukan banyak jawaban, karena ini adalah masalah yang sangat umum bagi pengguna Mongoose.