【发布时间】:2020-05-30 07:32:24
【问题描述】:
我有文档Person 喜欢
{
"_id": {
"$oid": "5e44659dcd"
},
"record": {
"Date_Of_Birth": "9/25/2018"
},
"_class": "com.example.entities.Birth"
}
Record 的类型为object,Date_Of_Birth 的类型为String,但Date 已存储在其中,我想执行查询以对其使用$gte 和$lte 操作。我正在使用弹簧数据 mongodb。似乎首先我必须使用 $dateFromString 将其转换为日期,但这似乎是我认为不需要的聚合。
下面是我目前创建的代码
Pageable pageable = PageRequest.of(page, size);
Query query = new Query(
Criteria
.where("record.Date_Of_Birth").gte(DateOperators.dateFromString(startDate).withFormat("mm/dd/yyyy"))
.andOperator(Criteria.where("record.Date_Of_Birth").lte(DateOperators.dateFromString(endDate).withFormat("mm/dd/yyyy"))
)).with(pageable);
生成这个查询
{ "record.Date_Of_Birth" : { "$gte" : { "value" : { "dateString" : "9/25/2018", "format" : "mm/dd/yyyy"}}}, "$and" : [{ "record.Date_Of_Birth" : { "$lte" : { "value" : { "dateString" : "9/25/2018", "format" : "mm/dd/yyyy"}}}}]}
而且根本不工作。有什么想法吗?
【问题讨论】:
-
为什么将日期值存储为字符串?
-
好吧...我现在别无选择。共享的 json 只是一个示例。实际的 json 是完全不同的,并且具有许多其他属性。我的应用程序将接收数据并将其存储在数据库中。所以我必须查询我目前拥有的东西。
-
startDate的类型和格式是什么? -
@prasad_ 它是字符串类型,我传递的值是“9/25/2018”
-
您正在将字符串与日期进行比较。我怀疑您还需要将文档中的字段转换为日期,可能使用 $expr。
标签: java spring mongodb spring-boot aggregation-framework