gpt4 book ai didi

java - Spring 在 MongoDB 中将 Date 保存为 String - 无法从 String 类型转换为 Date 类型

转载 作者:可可西里 更新时间:2023-11-01 10:43:42 24 4
gpt4 key购买 nike

我使用 org.springframework.data.mongodb.core.MongoTemplate 将数据保存到 MongoDB。我的示例数据是以下 bean:

public class SampleBean{
private Date date;
private List<Date> datesList;
private TreeMap<Date, Integer> datesMap;
// setters and getters
}

我正在按照指示打电话。

SampleBean bean = new SampleBean();
MongoTemplate mongo = new MongoTemplate();

List<Date> dateList = new ArrayList<Date>();
dateList.add(new Date());
TreeMap<Date,Integer> dateMap = new TreeMap<Date, Integer>();
dateMap.put(new Date(), new Integer(1));

bean.setDate(new Date());
bean.setDateList(dateList);
bean.setDateMap(dateMap);

mongo.save(bean, "SampleBean");

这就是我在 mongo 中得到的:

{
"_id" : ObjectId("53d028eeb71a1523582b1b1c"),
"_class" : "example.SampleBean",
"date" : ISODate("2014-07-23T21:28:14.869Z"),
"datesList" : [
ISODate("2014-07-23T21:28:14.876Z")
],
"datesMap" : {
"Wed Jul 23 23:28:14 CEST 2014" : 1
}
}

由于它的存储方式,我无法从 MongoDB 加载 bean 我明白了

 Handler execution resulted in exception - forwarding to resolved error view
org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value 'Wed Jul 23 23:28:14 CEST 2014'; nested exception is java.lang.IllegalArgumentException

为什么 TreeMap 中的日期不存储为 ISODate?

我做错了什么吗?

最佳答案

您在这里所做的是打破在 Java 之外的任何其他地方都存在的通用“哈希”结构的基本规则。这里的基本概念是 Hash 或 Map 的“键”只能是字符串,不能是特定类型。

MongoDB 使用 BSON,它是源自 JSON 规范的“二进制”和“类型化”形式。符合一般的 JSON 语义,BSON 文档的“键”必须是字符串,而不是任何其他特定类型。

至少 MongoDB 是这样执行的。因此,这里的一般经验法则是不要将字符串以外的其他类型放入 Map 的键中。

无论如何,这确实不是一个好的做法,因为“数据”作为键通常是个坏消息。你最好呈现为一个数组,像这样:

"dates": [
{ "date": ISODate("2014-07-23T21:28:14.876Z"), "count": 1 }
]

这些对于 MongoDB 来说更容易在查询中处理,而无需像在 MapReduce 中那样使用客户端处理或 JavaScript。对于一般的 MongoDB 查询,Map 类型结构需要用其键的绝对路径表示。

所以1.除了字符串,不要使用其他类型的键,它们无论如何都会被字符串化。 2.不要使用数据作为键,而是使用数组。

关于java - Spring 在 MongoDB 中将 Date 保存为 String - 无法从 String 类型转换为 Date 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24929575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com