当前位置: 首页 > 知识库问答 >
问题:

如何保存Timestamp类型值在MongoDb|Java

葛修永
2023-03-14

从Java驱动程序,我想保存一个文档,看起来像下面的json在MongoDb

{ "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")}

共有2个答案

华季同
2023-03-14

MongoDB建议存储一个日期,因为BSON时间戳供内部使用:

http://docs.mongodb.org/manual/reference/bson-types/#timestamps

不同之处在于Date具有更大的表示范围,因为它是一个64位整数,表示自Unix纪元以来的毫秒数。

在BSON时间戳中,只有32位具有此目的;其他32位是一秒钟内的递增顺序整数,以确保值的唯一性。我想这就是他们在oplog中使用时间戳的原因。

如果您不介意唯一性,我建议使用日期(也称为ISODate),因此选项2或选项3:

doc.put("ts", new Date());
左丘昕
2023-03-14

我用下面的默认mongob-java-驱动程序(没有Spring数据)。

DBObject doc= new BasicDBObject();
doc.put("ts", new BSONTimeStamp(1421006159, 4));

查找的MongoDB结果是:

{ "_id" : ObjectId("54b396da7fe45ee2d6c5e03a"), "ts" : Timestamp(1421006159, 4) }

因此,将BSONTimeStamp序列化到类名和类属性及其值取决于sping-data-mongob序列化器。您应该使用默认的java-mongob-驱动程序,或者在MongoDB中使用JavaDateISODate格式。

或者,您可以扩展spring data mongodb序列化程序,为类BSONTimeStamp编写自己的序列化程序和反序列化程序,以使用mongodb时间戳类型。

 类似资料:
  • 我想使用TypeORM将键值对存储到MongoDB。我的后端API是用NestJs制作的(不确定这是否重要)。键的类型为,值的类型为,因为我想将任何内容存储到此对象。 这是我的TypeForm数据库配置 我的映射实体不会自动生成密钥,因为我想自己设置它 当我想将一个新映射保存到数据库时,我运行这个逻辑(无论在哪里) 我得到这个错误 无法读取未定义的属性属性属性名称 执行数据库实体的功能时。似乎我无

  • 主要内容:Oracle TIMESTAMP数据类型简介,Oracle TIMESTAMP文字,Oracle TIMESTAMP示例,格式化TIMESTAMP值,提取TIMESTAMP组件,默认的TIMESTAMP格式在本教程中将学习Oracle 数据类型以及如何在Oracle数据库中有效处理数据。 Oracle TIMESTAMP数据类型简介 数据类型用于存储日期和时间数据,包括年,月,日,时,分和秒。 另外,它存储小数秒,它不是由DATE数据类型存储的。 要定义列,请使用以下语法: 指定字段小

  • 我需要创建一个带有单键的哈希表,它应该包含多个字符串,数组列表,字符串,数组列表类型的值.. 爱尔兰共和国..,字符串类型的Msg,整数数组列表类型的groupdestId,字符串类型的Id,整数数组列表类型的userdestId..

  • 基本上,我希望MyClass持有一个Hashmap将字段名(字符串)映射到任何类型的值。为此,我编写了一个单独的MyField类来保存类型和值信息。 这是我目前所掌握的: 但是正如您所看到的,映射声明失败了,因为我没有为MyField提供类型参数... 所以我想应该是 或 我有什么办法可以做到这一点吗?

  • 我已经将Luxon创建的datetime值保存到postgres数据库列中,类型为TIMESTAMP(3)。然后我想使用这个值,把它转换成其他时区,等等。然而,我似乎想不出如何“利用”它。 我使用以下方法创建了该对象: 然后,我将其插入到postgres数据库中,插入时间戳(3)类型的列中。 我使用查询从数据库中提取它。当我记录它时,它说它的值是: 我可以找到很多关于如何将日期插入sql的教程,但

  • 我有一个Java类具有类型的成员变量: 我正在使用MongoTemplate更新数据库中的字段: 将字段在DB中保持为类型: 现在,该方法也可以调用为: 在本例中,我得到一个异常: org.springframework.core.convert.converterNotFoundException:找不到能够从类型[java.lang.String]转换为类型[java.time.instant