web-dev-qa-db-ja.com

MongoDbにタイムスタンプタイプの値を保存する方法| Java

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")}
9
hellojava

デフォルトの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タイムスタンプタイプを使用することもできます。

4
Simulant

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());
4
LinJuuichi