sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose:CastError:Cast to ObjectId misslyckades för värdet [object Object] vid sökväg _id

Kort svar:använd mongoose.Types.ObjectId .

Mongoose (men inte mongo) kan acceptera objekt-ID som strängar och "casta" dem ordentligt åt dig, så använd bara:

MyClass.findById(req.params.id)

Förbehållet är dock om req.params.id är inte ett giltigt format för en mongo-ID-sträng, som kommer att skapa ett undantag som du måste fånga.

Så det mest förvirrande att förstå är att mongoose.SchemaTypes har saker du bara använder när du definierar mongoose-scheman och mongoose.Types har de saker du använder när du skapar dataobjekt som du vill lagra i databasen eller frågeobjekt. Så mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") fungerar, ger dig ett objekt som du kan lagra i databasen eller använda i frågor, och kommer att skapa ett undantag om du får en ogiltig ID-sträng.

findOne tar ett frågeobjekt och skickar en enskild modellinstans till återuppringningen. Och findById är bokstavligen ett omslag av findOne({_id: id}) (se källkoden här). Bara find tar ett frågeobjekt och skickar en array av matchande modellinstanser till återuppringningen.

Bara gå långsamt. Det är förvirrande men jag kan garantera dig att du blir förvirrad och inte träffar buggar i mungo vid det här laget. Det är ett ganska moget bibliotek, men det tar lite tid att få kläm på det.

Det andra misstänkta jag ser i ditt kodavsnitt är att inte använda new när du instansierar ChildClass . Utöver det måste du lägga upp din schemakod för att vi ska kunna hjälpa dig att hitta kvar CastErrors.



  1. Finns det något som Redis DB, men inte begränsat med RAM-storlek?

  2. Mungos befolka vs objekt häckande

  3. Jämför tecken på 64-bitars nummer med 32-bitars bitvisa operationer i Lua

  4. Konvertera ObjectID (Mongodb) till String i JavaScript