使用Java驱动程序3.8

时间:2018-07-11 11:21:31

标签: java mongodb datetime mongodb-query mongo-java-driver

下面是mongo集合:

{"_id":ObjectId("5a8f997fcdc2960adae4f919"),"COBDate":ISODate("2018-02-15T18:30:00.000Z"),"Version":1}

从mongo中提取COBDate的代码

MongoCollection<Document>collection=db.getCollection(collectionName);
String jsonMessage=collection.find().iterator().next().toJson;
JSONObject message=new JSONObject(jsonMessage);
String date=message.get(COBDate).toString();

但是它将COBDate的值提取为{"$date":1518719400000}

有人可以帮我以"2018-02-15T18:30:00.000Z"之类的日期格式获取它吗?

mongo驱动程序3.8和mongodb 3.2.6我遇到了上述问题。 mongo驱动程序3.6运行正常...

解决方案:-

          // or use a connection string
          MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
          MongoClient mongoClient = new MongoClient(connectionString);

          MongoDatabase database = mongoClient.getDatabase("testdb");

          MongoCollection<Document> collection = database.getCollection("user");

          //JsonWriterSettings writerSettings = new JsonWriterSettings(JsonMode.SHELL, true);           
          //System.out.println(doc.toJson(writerSettings));

          Document myDoc = collection.find().first();
          //System.out.println(myDoc.toJson(writerSettings));
          System.out.println("output (JSON) = " + com.mongodb.util.JSON.serialize(myDoc));
          System.out.println("output (JSON) = " + myDoc);

2 个答案:

答案 0 :(得分:0)

如果将file_list/201807/test.docx响应分配给find(而不是在其上调用org.bson.Document),则可以以特定于类型的方式读取其任何属性。对于toJson()属性,这意味着调用Date

例如:

document.getDate("...")

答案 1 :(得分:0)

这与Document对象的toJson方法调用有关。 从Java文档中可以看到,默认使用的JsonMode为STRICT。

/**
     * Gets a JSON representation of this document using the {@link org.bson.json.JsonMode#STRICT} output mode, and otherwise the default
     * settings of {@link JsonWriterSettings.Builder} and {@link DocumentCodec}.
     *
     * @return a JSON representation of this document
     * @throws org.bson.codecs.configuration.CodecConfigurationException if the document contains types not in the default registry
     * @see #toJson(JsonWriterSettings)
     * @see JsonWriterSettings
     */
    @SuppressWarnings("deprecation")
    public String toJson() {
        return toJson(new JsonWriterSettings());
    }

STRICT模式将以Epoch格式返回日期值。如果需要ISO格式,则应将JsonWriter配置为使用RELAXED模式。

例如:- 将构建器作为toJson方法的参数传递。它应该为您提供ISO格式的日期值

使用myDoc.toJson(JsonWriterSettings.builder().build());作为构建器的默认设置为“放松”模式

MongoCollection<Document>collection=db.getCollection(collectionName);
String jsonMessage=collection.find().iterator().next().toJson(JsonWriterSettings.builder().build());
JSONObject message=new JSONObject(jsonMessage);
String date=message.get(COBDate).toString();