MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongoose:CastError:Cast to ObjectId nie powiodło się dla wartości [object Object] w ścieżce _id

Krótka odpowiedź:użyj mongoose.Types.ObjectId .

Mongoose (ale nie mongo) może akceptować identyfikatory obiektów jako ciągi i "rzucać" je poprawnie za Ciebie, więc po prostu użyj:

MyClass.findById(req.params.id)

Jednak zastrzeżeniem jest, jeśli req.params.id nie jest poprawnym formatem dla łańcucha identyfikatora mongo, który zgłosi wyjątek, który musisz przechwycić.

Więc główną mylącą rzeczą do zrozumienia jest to, że mongoose.SchemaTypes ma rzeczy, których używasz tylko podczas definiowania schematów mongoose, i mongoose.Types ma to, czego używasz podczas tworzenia obiektów danych, które chcesz przechowywać w bazie danych lub obiektach zapytań. Więc mongoose.Types.ObjectId("51bb793aca2ab77a3200000d") działa, da ci obiekt, który możesz przechowywać w bazie danych lub użyć w zapytaniach, i wyrzuci wyjątek, jeśli otrzyma nieprawidłowy ciąg ID.

findOne pobiera obiekt zapytania i przekazuje pojedynczą instancję modelu do wywołania zwrotnego. I findById jest dosłownie opakowaniem findOne({_id: id}) (patrz kod źródłowy tutaj). Po prostu find pobiera obiekt zapytania i przekazuje tablicę pasujących instancji modelu do wywołania zwrotnego.

Po prostu idź powoli. To mylące, ale gwarantuję, że w tym momencie jesteś zdezorientowany i nie trafiasz na błędy w manguście. To dość dojrzała biblioteka, ale zrozumienie jej zajmuje trochę czasu.

Inną podejrzaną rzeczą, którą widzę w twoim fragmencie, jest nieużywanie new podczas tworzenia instancji ChildClass . Poza tym musisz opublikować swój kod schematu, abyśmy mogli pomóc Ci rozwiązać wszelkie pozostałe błędy CastErrors.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dlaczego MongoDB jest tak szybki

  2. MongoDB — nieautoryzowany użytkownik administratora

  3. MongoDB $stdDevPop

  4. MongoDB $dzielenie

  5. Dlaczego nie zaleca się zamykania połączenia MongoDB w dowolnym miejscu w kodzie Node.js?