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

Spring Boot和MongoDB-如何保存日期

厍光霁
2023-03-14

我已经按照 Spring.io 指南访问了MongoDB数据,https://spring.io/guides/gs/accessing-mongodb-data-rest/,并且可以将文档保存到mongo中。

当我试图在POJO中添加一个日期字段并将日期设置为< code>new Date()对象时,它只是在保存到mongo时将值保存为null。

我创建了一个非常基本的@RestController,它工作正常(传入请求正文,并使用我的MongoRepository类将其保存下来),通过Rest控制台保存文档。我尝试在这里创建一个新日期并在将其保存到Mongo之前设置它,但这给了我类似于“createdDate”:1472394366324的东西。

我可以将日期以字符串形式保存到Mongo中,但我想要的是能够以日期格式保存日期,这样我就可以用基本的“日期之间”查询来查询日期(所以类似这样,确切的格式并不重要-<code>“date”:ISODate(“2014-02-10T10:50:42.389Z”)

实现此目的的最简单方法是什么?

编辑:

Pojo类-

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

@Document(collection = "Musicians")
public class Musician {

@Id
private String id;

private String firstName;
private String lastName;

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date createdDate = new Date();

public Musician() {}

public Musician(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
    //createdDate = new Date();
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public Date getCreatedDate() {
    return createdDate;
}

public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}
}

RestController类-

@RestController
@RequestMapping(value = "/musicians")
public class MusicianController {

@Autowired
MusicianRepository musicianRepository;

@Autowired
MongoTemplate mongoTemplate;

@RequestMapping(method = RequestMethod.POST, value = "")
public ResponseEntity<HttpStatus> createMusician(@RequestBody Musician musician) {
    Musician musicianIn = musician;

    musicianRepository.save(musicianIn);

    return new ResponseEntity(HttpStatus.ACCEPTED);
}

@RequestMapping(method = RequestMethod.GET, value = "")
public ResponseEntity<List<Musician>> getMusicians() {
    List<Musician> musicians = musicianRepository.findAll();

    return new ResponseEntity<List<Musician>>(musicians, HttpStatus.OK);
}
}

共有3个答案

祁飞翰
2023-03-14

发生这种情况是因为mongo db以UTC格式存储日期,这不是毫秒,您可以查看mongoDBhttps://docs.mongodb.com/manual/reference/method/Date/

您必须将其转换为本地时区日期。

那正初
2023-03-14

我在当地的mongodb中尝试了这个,它的工作原理。

您可以尝试以下方法吗?

package com.mongo.examples;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongoDateTest {

    public static void main(String args[]){

        MongoClient mongoClient = new MongoClient("localhost",27017);
        MongoDatabase database = mongoClient.getDatabase("testdates");

        MongoCollection<Document> collection = database.getCollection("dts");
        collection.drop();
        List<Document> insertList = new ArrayList<Document>();
        Date date = new Date();
        Document document = new Document().
                append("_id", 20).append("date",date);
        insertList.add(document);
        collection.insertMany(insertList);
        System.out.println(collection.count());
        MongoCursor<Document> doc = collection.find(new Document("date", date)).iterator();
        System.out.println(doc.next().getDate("date"));
    }
}
花飞尘
2023-03-14

使用创建/修改日期的最常见方式是通过注释@CreatedDate/@ModifiedDate。要启用它,您必须在@Configuration旁边的某个地方(或者在主应用程序文件中)使用@EnableAuditing注释。如果您喜欢更少的注释,可以使用java8 LocalDateTime类。

 类似资料:
  • 本文向大家介绍SpringBoot中logback日志保存到mongoDB的方法,包括了SpringBoot中logback日志保存到mongoDB的方法的使用技巧和注意事项,需要的朋友参考一下 Springboot默认集成的就是logback,logback相对来说是优秀于log4j的,log4j2也是参考了logback的设计。 自定义Appender非常简单,继承一下AppenderBas

  • 我使用SendGrid向用户发送带有两个参数(用户id和令牌)的重置密码链接。我有另一个组件可以保存用户更改的密码,但我得到的只是一个错误用户。保存不是一个函数 电子邮件帮助程序代码。 SendLink组件 尝试更新数据库中的密码但我得到错误的组件user.save()不是函数 我的路线

  • Db是MySQL 5.0,Yii版本1.1.12。 如果有任何帮助,我将不胜感激,我几乎被卡住了.....谢谢...

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

  • 从Java驱动程序,我想保存一个文档,看起来像下面的json在MongoDb 我尝试过的选择。 选项1:Map doc=new HashMap(1); 它会产生以下非必需的格式 备选案文2: 其结果是:

  • 嗨,我有一个角色表和一个权限表,它有多对多的关系。我已经创建了下面链接中提到的实体 https://www.baeldung.com/jpa-多对多 角色实体 权限实体 我已经为每个实体创建了JPA存储库,并且正在尝试将权限保存给一个角色。我在表中已经有了一组/列表的权限,我正在尝试将它们映射到某个角色。我正在尝试使用spring JPA存储库执行下面的代码。 在执行我得到的代码时 org.hib