自分がいくらだと思っていても、ObjectIdをクエリしているわけではありません。 ではない16進文字列としてエンコードされたObjectIdをクエリしています 同じこと。適切にタイプキャストすれば、はるかに多くの成功を収めることができます。
mongo(JS)REPLシェルから詳細に編集:
> // 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" }
IRCで話し合った後、与えられた回答の「検索可能な用語」を理解するのは難しいようです。 StackOverflow(またはGoogle、またはDDG)で「mongoosetypecast ObjectId」(引用符なし、または単に「mongoose ObjectId」…)を検索すると、これはMongooseユーザーに特に一般的な問題であるため、多くの回答が見つかります。
>