英文:
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("{ 'dob' : { $gt: ?0 } }")
List<Brokers> findByDobLessThan(Date from);
Generated log:
find using query: { "dob" : { "$gt" : { "$date" : 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:
{
"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"
}
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.
专注分享java语言的经验与见解,让所有开发者获益!
评论