如何在 MongoDb 中保存时间戳类型值 | Java
How to save Timestamp type value in 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")}
我使用以下默认 mongodb-java-驱动程序(没有 spring 数据)。
DBObject doc= new BasicDBObject();
doc.put("ts", new BSONTimeStamp(1421006159, 4));
查找的 MongoDB 结果是:
{ "_id" : ObjectId("54b396da7fe45ee2d6c5e03a"), "ts" : Timestamp(1421006159, 4) }
因此 BSONTimeStamp
到类名的序列化和 Class 属性及其值取决于 spring-data-mongodb 序列化程序。您应该使用默认的 java-mongodb-驱动程序或使用 Java Date
和 MongoDB.
中的 ISODate
格式
或者也许您可以扩展 spring-data-mongodb 序列化程序并为 Class BSONTimeStamp
编写您自己的序列化程序和反序列化程序以使用 MongoDB 时间戳类型。
从 MongoDB 他们建议存储日期,因为 BSON 时间戳供内部使用:
http://docs.mongodb.org/manual/reference/bson-types/#timestamps
区别在于Date有更多的表示范围,因为它是一个64位整数,表示自Unix纪元以来的毫秒数。
在 BSON Timestamp 中只有 32 位有这个目的;其他 32 位是一秒内递增的序数整数,以保证值的唯一性。我想这就是他们在 oplog 中使用时间戳的原因。
如果您不介意唯一性,我建议使用日期(又名 ISODate),因此选项 2 或选项 3:
doc.put("ts", new Date());
来自 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-驱动程序(没有 spring 数据)。
DBObject doc= new BasicDBObject();
doc.put("ts", new BSONTimeStamp(1421006159, 4));
查找的 MongoDB 结果是:
{ "_id" : ObjectId("54b396da7fe45ee2d6c5e03a"), "ts" : Timestamp(1421006159, 4) }
因此 BSONTimeStamp
到类名的序列化和 Class 属性及其值取决于 spring-data-mongodb 序列化程序。您应该使用默认的 java-mongodb-驱动程序或使用 Java Date
和 MongoDB.
ISODate
格式
或者也许您可以扩展 spring-data-mongodb 序列化程序并为 Class BSONTimeStamp
编写您自己的序列化程序和反序列化程序以使用 MongoDB 时间戳类型。
从 MongoDB 他们建议存储日期,因为 BSON 时间戳供内部使用:
http://docs.mongodb.org/manual/reference/bson-types/#timestamps
区别在于Date有更多的表示范围,因为它是一个64位整数,表示自Unix纪元以来的毫秒数。
在 BSON Timestamp 中只有 32 位有这个目的;其他 32 位是一秒内递增的序数整数,以保证值的唯一性。我想这就是他们在 oplog 中使用时间戳的原因。
如果您不介意唯一性,我建议使用日期(又名 ISODate),因此选项 2 或选项 3:
doc.put("ts", new Date());