如何在MongoDb中保存时间戳类型值 Java的

hel*_*ava 8 java mongodb bson spring-data-mongodb

From Java driver, I want to save a document that looks like below json in MongoDb

{ "ts" : Timestamp(1421006159, 4)}
Run Code Online (Sandbox Code Playgroud)

Options I tried.

Option 1: Map doc= new HashMap(1);

doc.put("ts", new BSONTimeStamp());
Run Code Online (Sandbox Code Playgroud)

It results in the below not required format

{"ts" : {
        "_inc" : 0,
        "_class" : "org.bson.types.BSONTimestamp"
    }}
Run Code Online (Sandbox Code Playgroud)

Option 2:

doc.put("ts",new Timestamp(new Date().getTime()));
Run Code Online (Sandbox Code Playgroud)

it results in :

{"ts" : ISODate("2015-01-12T05:36:43.343Z")}
Run Code Online (Sandbox Code Playgroud)

Sim*_*ant 6

我将以下内容与默认的 mongodb-java-driver (无 spring 数据)一起使用。

DBObject doc= new BasicDBObject();
doc.put("ts", new BSONTimeStamp(1421006159, 4));
Run Code Online (Sandbox Code Playgroud)

MongoDB 的查找结果是:

{ "_id" : ObjectId("54b396da7fe45ee2d6c5e03a"), "ts" : Timestamp(1421006159, 4) }
Run Code Online (Sandbox Code Playgroud)

因此,类名和类属性及其值的序列化BSONTimeStamp取决于 spring-data-mongodb 序列化器。您应该使用默认的 java-mongodb-driver 或使用 JavaDateISODateMongoDB 中的格式。

或者,也许您可​​以扩展 spring-data-mongodb 序列化器并为该类编写自己的序列化器和反序列化器BSONTimeStamp 以使用 MongoDB Timestamp 类型。