我正在尝试对DateTime数据格式进行范围搜索。日期存储在MongoDB中的Joda的DateTime格式中。
当我对大于给定日期的数据执行FIND查询时,抛出ConverterNotFoundException。
有人可以分享有关Date对象为何与DateTime(Joda)进行对话的信息,以及如何解决这个问题?
异常
Query: { "monthYear" : { "$gte" : { $java : 2014-01-01T00:00:00.000+01:00 } } }, Fields: null, Sort: null
申请代码
@DateTimeFormat(iso = ISO.DATE_TIME)
private DateTime monthYear;
生成的查询如下所示:
<div id="top"><center><img src="images/header.png" style="max-width:100%;"></center></div>
<header id="header" class="site-header" role="banner">
<div id="header-inner" class="container sixteen columns over">
<hgroup class="one-third column alpha">
</hgroup>
<nav id="main-nav" class="two thirds column omega">
<ul>
<li>
<a href="index.html">Home</a>
</li>
<li>
<a href="about-us.html">About Us</a>
</li>
<li>
<a href="news.html">News</a>
</li>
<li>
<a href="dealers.html">Dealers</a>
</li>
<li>
<a href="products.html">Products</a>
</li>
<li>
<a href="http://www.cosworth-europe.co.uk/shop">Buy Online</a>
</li>
<li>
<a href="contact.html">Contact</a>
</li>
</ul>
</nav>
</div>
</header>
模型类中使用的注释
#top {background-image: url(../images/header-gradient.gif);
background-repeat: repeat-x;
max-width:100%;
height:110px;}
#header {margin-top: -5px; margin-bottom: 30px;}
h1 a { text-indent: -9999px; }
#site-title { padding-top: 10px;}
#main-nav {
position:absolute;
right:120px;
bottom:0px;
}
#main-nav ul, #main-nav li {display: inline; padding: 7px;}
#main-nav a {text-decoration:none; color: black;}
答案 0 :(得分:0)
在调查此行为后,发现了以下问题和解决方案。
<强>问题强>
从不同的MongoDB UI读取数据类型时,对MongoDB中存储的数据的解释会有所不同。例如:Mongovue将类型解释为DateTime,DBeaver将其解释为Timestamp
<强>解决方案强> 使用日期格式的日期时间对象从应用程序中查询数据库。
示例强>
int year;
DateTime monthYearFrom = new DateTime(year, 1, 1, 1, 0);
DateTime monthYearTo = new DateTime((year+1), 1, 1, 1, 0);
query.addCriteria(Criteria.where("monthYear").gte(monthYearFrom.toDate()).lte(monthYearTo.toDate()));