sql >> Database >  >> NoSQL >> MongoDB

Mongoose:CastError:Cast naar ObjectId mislukt voor waarde [object Object] op pad _id

Kort antwoord:gebruik mongoose.Types.ObjectId .

Mongoose (maar niet mongo) kan object-ID's als tekenreeksen accepteren en ze op de juiste manier voor u "casten", dus gebruik gewoon:

MyClass.findById(req.params.id)

Het voorbehoud is echter als req.params.id is geen geldige indeling voor een mongo ID-tekenreeks, die een uitzondering genereert die u moet opvangen.

Dus het belangrijkste verwarrende om te begrijpen is dat mongoose.SchemaTypes heeft dingen die je alleen gebruikt bij het definiëren van mangoestschema's, en mongoose.Types heeft de dingen die u gebruikt bij het maken van gegevensobjecten die u in de database of query-objecten wilt opslaan. Dus mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") werkt, geeft u een object dat u in de database kunt opslaan of in query's kunt gebruiken, en zal een uitzondering genereren als een ongeldige ID-tekenreeks wordt gegeven.

findOne neemt een query-object en geeft een enkele modelinstantie door aan de callback. En findById is letterlijk een wrapper van findOne({_id: id}) (zie broncode hier). Gewoon find neemt een query-object en geeft een reeks overeenkomende modelinstanties door aan de callback.

Ga gewoon langzaam. Het is verwarrend, maar ik kan je garanderen dat je op dit moment in de war raakt en geen bugs in mangoest raakt. Het is een behoorlijk volwassen bibliotheek, maar het kost wat tijd om het onder de knie te krijgen.

Het andere verdachte dat ik in je fragment zie, is het gebruik van new bij het instantiëren van ChildClass . Verder moet je je schemacode posten zodat we je kunnen helpen eventuele resterende CastErrors op te sporen.



  1. Redis publiceren/abonneren:kijk op welke kanalen momenteel geabonneerd zijn

  2. Geef een verwijzing naar een Redis-instantie door aan een Gorilla/Mux Handler

  3. Mongoose-aggregatiequery mislukt in Jest/Mockgoose-test, werkt elders

  4. MongoDB-service draait niet in Fedora