Spring Data MongoDB的日期字段在查询或聚合时无法正常工作

huangapple 未分类评论45阅读模式
英文:

Spring Data MongoDB Date field is not working on Query or Aggregation

问题

Spring-Boot仓库类:

@Query("{ 'dob' : { $gt: ?0  } }")
List<Brokers> findByDobLessThan(Date from);

生成的日志:

find using query: { "dob" : { "$gt" : { "$date" : 1585918200956}}} fields: Document{{}} for class: 
class com.kallam.middleware.model.broker.Brokers in collection: brokers

这是Mongo数据库中以不同格式存储的数据。
MongoDb数据:

{
    "dob" : ISODate("1986-02-10T00:00:00.000Z"),
    "dow" : ISODate("2011-02-10T00:00:00.000Z"),
    "creditLimit" : 0,
    "adjustBills" : "NONE",
    "contactRelation" : "NILL",
    "occupation" : "TYRE RETRADING",
    "age" : 0,
    "caste" : "Nill",
    "gender" : "MALE",
    "createdDt" : ISODate("2020-04-03T11:54:14.900Z"),
    "updatedDt" : ISODate("2020-04-03T11:54:14.901Z"),
    "ownrent" : "TRUE",
    "simbrand" : "AIRTELL"
}

我的发现:

我发现Java将日期转换为长整型(时间),然后传递给数据库,所以数据库无法识别,因为它处于不同的格式中。

我使用的是Java 1.8、Spring Boot 2.2.6.RELEASE和spring-boot-starter-data-mongodb。

英文:

Spring-Boot Repository class:

@Query(&quot;{ &#39;dob&#39; : { $gt: ?0  } }&quot;)
	List&lt;Brokers&gt; findByDobLessThan(Date from);

Generated log:

find using query: { &quot;dob&quot; : { &quot;$gt&quot; : { &quot;$date&quot; : 1585918200956}}} fields: Document{{}} for class: 
class com.kallam.middleware.model.broker.Brokers in collection: brokers

This is the data in mongo databse which is in different format.
MongoDb data:

{
&quot;dob&quot; : ISODate(&quot;1986-02-10T00:00:00.000Z&quot;),
    &quot;dow&quot; : ISODate(&quot;2011-02-10T00:00:00.000Z&quot;),
    &quot;creditLimit&quot; : 0,
    &quot;adjustBills&quot; : &quot;NONE&quot;,
    &quot;contactRelation&quot; : &quot;NILL&quot;,
    &quot;occupation&quot; : &quot;TYRE RETRADING&quot;,
    &quot;age&quot; : 0,
    &quot;caste&quot; : &quot;Nill&quot;,
    &quot;gender&quot; : &quot;MALE&quot;,
    &quot;createdDt&quot; : ISODate(&quot;2020-04-03T11:54:14.900Z&quot;),
    &quot;updatedDt&quot; : ISODate(&quot;2020-04-03T11:54:14.901Z&quot;),
    &quot;ownrent&quot; : &quot;TRUE&quot;,
    &quot;simbrand&quot; : &quot;AIRTELL&quot;
}

My findings:

I found that Java is converting date to long (time) and passing to database so database can't recognize because it is in different format.

I am using Java 1.8, Spring Boot 2.2.6.RELEASE, spring-boot-starter-data-mongodb.

huangapple
  • 本文由 发表于 2020年4月3日 21:06:33
  • 转载请务必保留本文链接:https://java.coder-hub.com/61012604.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定