java - 在spring mongodb中的两个字符串日期范围之间查找
问题描述
我有Person
类似的文件
{
"_id": {
"$oid": "5e44659dcd"
},
"record": {
"Date_Of_Birth": "9/25/2018"
},
"_class": "com.example.entities.Birth"
}
Record
is of type object
,Date_Of_Birth
is of typeString
但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"}}}}]}
并且根本不工作。任何的想法?
解决方案
$expr允许在查询中使用聚合运算符。这将允许您将存储的值转换为日期,以便您可以进行苹果与苹果的比较。
db.collection.find({
$expr: {
$gte: [
{$dateFromString: {
dateString: "$record.Date_Of_Birth",
format: "%m/%d/%Y",
timeZone: "EST5EDT"}},
{$dateFromString: {
dateString: "9/25/2018",
format: "%m/%d/%Y",
timeZone: "EST5EDT"}}
]
}
})
推荐阅读
- excel - 如何从 VBA 中的表中获取唯一行?
- linux - 当图像尺寸较大时,使用 shmsink 和 shmsrc 的 GStreamer 管道停止
- java - 在spring boot mongodb中使用方法查询时如何为所有查询添加默认查询条件
- microsoft-graph-api - Planner 和 To Do 的任务没有使用已经通过 api 创建的名称
- flutter - 如何结合 SingleChildScrollView 和垂直轮播?
- windows - 卸载 Anaconda 删除了我的命令提示符
- api - CRON 任务中 REST 的操作问题
- python - Pandas 将列移动到另一个 DataFrame
- java - Android Java:启动蓝牙套接字线程时应用程序崩溃
- java - Aspose 单元格 - 具有化学结构的 OLEObjects 在保存和重新打开时将形状更改为箭头