Может кто-нибудь объяснить, почему целое число преобразуется в удвоенное, а я пытаюсь получить в java.
Документ в movie
сборник:
{ "name" : "Star Wars", "year" : 1977 }
Давайте рассмотрим этот Java код
MongoCollection<Document> movies = db.getCollection("movie");
Document d1 = movies.find(new Document()).iterator().tryNext();
System.out.println("> " + d1.get("name") + " : " + d1.get("year"));
Prints, > Star Wars : 1977.0
Это связано с типом данных поля year
при вводе из mongo
ракушка. По умолчанию числовые данные имеют значение с плавающей точкой double .
Если вы знаете (впереди), что в базе данных есть значение double , и вы хотите, чтобы оно было целое число в вашем приложении, вы можете просто преобразовать указанное поле c в целое число следующим образом:
System.out.println("> " + ((Double) d1.get("year")).intValue()); // prints > 1977
Но оболочка также предоставляет другие типы данных для указания c потребности; см. Типы данных в пн go Оболочка . Ниже показано, что целое число может быть сохранено в базе данных и получено из вашего приложения Java.
В оболочке вставьте следующий документ:
{ name: "Return of Jedi", year: new NumberInt(1983) }
И получите из тот же код Java (без приведения к целому числу), который печатает, > Return of Jedi : 1983
Отображение документа в Java Класс Как заставить ваше приложение Java видеть указанный тип поля c в виде целого числа (как в примере, поле year
) и использовать документ коллекции в качестве объекта Java? Предположим, у вас есть коллекция mov ie, и она может быть представлена в вашем приложении как Java POJO; Movie.java
:
public class Movie {
private ObjectId id;
private String name;
private int year;
public Movie() {
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
// other get/set methods, etc.
}
Обратите внимание, что поле year
объявлено int
в указанном выше классе Movie
(и предполагается, что поле базы данных хранится как число с плавающей запятой по умолчанию).
Код, который отображает документ базы данных и класс Java POJO ( Plain Old Java Objects ) с помощью «кодеков». Данные преобразуются в объект Java, который можно использовать в приложении без каких-либо изменений.
A код c определяет способ преобразования данных BSON в документе. Есть стандартные и пользовательские кодеки. В следующем коде мы используем кодеки по умолчанию для сопоставления базы данных с Java данными (и в этом случае это работает). Для сложных требований вы можете создать собственный код c.
CodecRegistry pojoCodecRegistry =
fromRegistries(
MongoClientSettings.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoCollection<Movie> movies = db.getCollection("movie", Movie.class
.withCodecRegistry(pojoCodecRegistry);
Movie m1 = movies.find(new Document()).iterator().tryNext();
System.out.println("> " + m1.getName() + " : " + m1.getYear()); // > Star Wars : 1977
К вставить документ, используя Movie
POJO:
Movie document = new Movie();
document.setName("Empire Strikes Back");
document.setYear(1980);
movies.insertOne(document);