我已经按照 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);
}
}
发生这种情况是因为mongo db以UTC格式存储日期,这不是毫秒,您可以查看mongoDBhttps://docs.mongodb.com/manual/reference/method/Date/
您必须将其转换为本地时区日期。
我在当地的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"));
}
}
使用创建/修改日期的最常见方式是通过注释@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