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

MongoDB:próba odczytania Long z JSON powoduje, że java.lang.Integer nie może być rzutowana na java.lang.Long

Sterownik Mongo Java ustalił, że wartość serial może "zmieścić się" w INT32, więc traktuje go jako taki. Po wywołaniu doc.getLong() prosisz sterownik o rzutowanie liczby całkowitej na wartość Long, stąd wyjątek rzutowania klasy. Jeśli na przykład wartość serial był 2147483648 (tj. maksymalna wartość całkowita + 1) wtedy sterownik Mongo Java uzna, że ​​jest to INT64 i możesz bezpiecznie wywołać doc.getLong() .

Tak więc, ponieważ (a) wymodelowałeś ten atrybut jako Long w twoim modelu klasy i (b) nie każda utrwalona wartość tego atrybutu wymaga przechowywania jako INT64 ... musisz być wrażliwy na jego utrwalony typ podczas konwertowania go na długi.

Jak? Cóż, o ile serial atrybut jest utrwalany jako pewna liczba (np. INT32 , INT64 ) to połączenie ...

doc.get(DBConstants.SERIAL)

... zawsze zwróci obiekt będący jakąś podklasą java.lang.Number a zatem rzutowanie na Number i używając longValue() zadziała.

Na przykład:

serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pomnóż pole przez wartość w Mongodb

  2. Zapytania hierarchiczne z Mongo za pomocą $graphLookup

  3. Aktualizacja Sails.js do wersji v1 z uwzględnieniem odwrotnej wielkości liter

  4. Grupuj i licz według miesiąca

  5. Dlaczego otrzymuję mongoose.connect nie jest funkcją podczas próby połączenia z mangoose?