如何使用 Java 驱动程序从存储在 MongoDB 中的数组中检索整数和时间戳值

How to retrive Integer and Timestamp value from array stored in MongoDB with Java Driver

我在 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 数组中输入的值,而不是 DBObjectBasicDBObject,但是作为Timestamp中的对象,class即具有可比性,能够进行其他操作。我该怎么办?

到目前为止,我已经能够像 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();
    }

对不起我的英语,谢谢你的帮助。

基于 Java 驱动程序 API 您可以从 DBObject 获得基本 Java 类型。

您不能直接从 DBObject 获取 Timestamp 实例。

API BasicDBObject 文档: http://mongodb.github.io/mongo-java-driver/3.4/javadoc/com/mongodb/BasicDBObject.html

API 继承 BasicBSONObject 的文档:http://mongodb.github.io/mongo-java-driver/3.4/javadoc/org/bson/BasicBSONObject.html

还有其他可用的 Java MongoDB 库。其中之一是 MongoJack,它基于带有 Jackson 库的 Java 驱动程序。它支持开箱即用的 JSON 到 Java 对象映射。

将您的代码更新为以下内容。使用 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);