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