Javaドライバーから、MongoDbでjsonの下のようなドキュメントを保存したい
{ "ts" : Timestamp(1421006159, 4)}
私が試したオプション。
オプション1: Map doc = new HashMap(1);
doc.put("ts", new BSONTimeStamp());
その結果、以下の不要な形式になります
{"ts" : {
"_inc" : 0,
"_class" : "org.bson.types.BSONTimestamp"
}}
オプション2:
doc.put("ts",new Timestamp(new Date().getTime()));
その結果:
{"ts" : ISODate("2015-01-12T05:36:43.343Z")}
デフォルトのmongodb-Java-driver(Springデータなし)で以下を使用しました。
DBObject doc= new BasicDBObject();
doc.put("ts", new BSONTimeStamp(1421006159, 4));
そして、検索のMongoDBの結果は次のとおりです。
{ "_id" : ObjectId("54b396da7fe45ee2d6c5e03a"), "ts" : Timestamp(1421006159, 4) }
したがって、BSONTimeStamp
のクラス名とクラス属性へのシリアル化は、それらの値がspring-data-mongodbシリアライザーに依存します。デフォルトのJava-mongodb-driverを使用するか、MongoDBでJava Date
およびISODate
形式を使用する必要があります。
または、spring-data-mongodbシリアライザーを拡張し、クラスBSONTimeStamp
用に独自のシリアライザーとデシリアライザーを記述して、MongoDBタイムスタンプタイプを使用することもできます。
BSONタイムスタンプは内部使用のためであるため、MongoDBから日付を保存することをお勧めします。
http://docs.mongodb.org/manual/reference/bson-types/#timestamps
違いは、Unixエポックからのミリ秒数を表す64ビット整数であるため、Dateの表現範囲が広いことです。
BSONタイムスタンプでは、32ビットのみがこの目的を持っています。他の32ビットは、値の一意性を保証するために1秒以内の増分序数整数です。これが、彼らがoplogでタイムスタンプを使用する理由だと思います。
一意性を気にしない場合は、日付(別名ISODate)を使用することをお勧めします。したがって、オプション2またはオプション3:
doc.put("ts", new Date());