BigDecimal log_max=new BigDecimal(21.11617279052734);
BigDecimal log_min=new BigDecimal(21.01617279052734);
BigDecimal lat_max=new BigDecimal(61.43435454343454);
BigDecimal lat_min=new BigDecimal(61.03435454343454);
String col_name="latitude";
String col_name2="longitude";
List<BasicDBObject> criteria=new ArrayList<BasicDBObject>();
BasicDBObject searchQuery1 =new BasicDBObject(col_name, new BasicDBObject("$gte", lat_min).append("$lte", lat_max));
criteria.add(searchQuery1);
BasicDBObject searchQuery2=new BasicDBObject(col_name2, new BasicDBObject("$gte", log_min).append("$lte", log_max));
criteria.add(searchQuery2);
DBCursor cursor = coll.find(query);
while (cursor.hasNext()) {
DBObject cursorObj = cursor.next();
LOGGER.info("Collection successf");
Object temp1 = cursorObj.get("longitude");
BigDecimal longitude = new BigDecimal(temp1.toString());
System.out.println("longitude ::::"+longitude);
Object temp2 =cursorObj.get("latitude");
BigDecimal latitude = new BigDecimal(temp2.toString());
LOGGER.info("done getting ");
}
}
我收到java.lang.IllegalArgumentException:无法序列化类java.math.BigDecimal
有没有人知道BigDecimal会变成什么样的......
答案 0 :(得分:2)
通过浏览互联网上提供的一些资料,我将尝试为您提供简明的答案。
首先,MongoDB本身不支持BigDecimal
,因此您无法直接使用BigDecimal
。那怎么处理呢?
嗯,有其他选择。
BigDecimal
值转换为String
并存储在数据库中。如果您使用spring-data
,那么它将被处理。但是存储为String
并不能按预期工作,而可能会在聚合查询中给出意外结果。 Double
就足够了,那么您可以使用Double
,或者如果您想使用BigDecimal
,那么您可以在spring-data-mongodb
中编写自定义转换器,当您在数据库中存储时会将BigDecimal
转换为Double
,并在从Double
转换为BigDecimal
时将其转换为connection.schema.createTableIfNotExists('notification', (table) => {
// UUID
table.uuid('id').primary().defaultTo(connection.raw('uuid_generate_v4()'))
// Adds a "created_at" and "updated_at" columns on the database,
// setting these each to "dateTime" types.
table.timestamps()
table.string('type', 255)
table.string('summary', 255)
table.string('text', 255)
table.string('actionText', 255)
table.string('actionUrl', 255)
table.uuid('recipient').references('user.id')
}),
。您可以查看this答案以获取示例。