我在Java中创建了一个生成值的程序,并以下列形式将它们存储在MongoDB
数据库中:
{
"_id" : 0,
"destination" : "destination_1",
"origin" : "origin1",
"duration_value" : [
5,
5,
12
],
"duration_text" : [
null,
null,
null
],
"timestamp" : [
ISODate("2017-05-03T15:17:12.570Z"),
ISODate("2017-05-03T15:17:39.363Z"),
ISODate("2017-05-06T17:16:43.925Z")
]}
如您所见,有三个数组。在duration_value
数组中,它们将始终存储在整数值中,而在timestamp
数组中,它们将始终存储time stamp
个值。
我现在需要检索存储在duration_value
中的整数值,以便进行计算并检索在timestamp
数组中输入的值,而不是DBObject
或BasicDBObject
,但作为Timestamp
类中可比较的对象,能够进行其他操作。我该怎么办?
到目前为止,我已经能够从DBObject
检索数据库中的元素,而不是原始类型,我甚至无法在没有错误的情况下转换DBObject
错误。我使用了以下代码:
MongoClient mongo = null;
DBCursor cursor = null;
try {
mongo = new MongoClient ("localhost", 27017);
DB db = mongo.getDB("testdb2");
DBCollection table = db.getCollection("user");
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("_id", 0);
cursor = table.find(searchQuery);
DBObject resultElement = cursor.next();
List<DBObject> list = (List<DBObject>)resultElement.get("timestamp");
for(int i = 0; i < list.size(); i++){
System.out.println("indice: " + i + " contenuto: " + list.get(i));
}
}
catch(Exception e){
System.out.println("error : " + e.getMessage());
System.out.println("error : " + e.getCause());
}
finally{
cursor.close();
}
对不起我的英文,谢谢你的帮助。
答案 0 :(得分:0)
基于Java Driver API,您可以从DBObject获取基本Java类型。
您无法直接从DBObject获取Timestamp实例。
BasicDBObject的API文档: http://mongodb.github.io/mongo-java-driver/3.4/javadoc/com/mongodb/BasicDBObject.html
继承的BasicBSONObject的API文档:http://mongodb.github.io/mongo-java-driver/3.4/javadoc/org/bson/BasicBSONObject.html
还有其他Java MongoDB库。其中之一是MongoJack基于Java驱动程序和Jackson库。它支持开箱即用的JSON到Java对象映射。
答案 1 :(得分:0)
将您的代码更新为以下内容。使用findOne
代替find
进行id
搜索。
MongoDB将时间戳映射到java.util.Date
,将号码映射到java.lang.Double
。
DBObject result = table.findOne(searchQuery);
BasicDBList number = (BasicDBList)result.get("duration_value");
BasicDBList timestamp = (BasicDBList)result.get("timestamp");
int integer = ((Number)number.get(i)).intValue();
Date date = (Date) timestamp.get(i);