Mysql 使用MongoDB和Spring数据MongoDB进行日期查询
我想搜索预订开始日期和预订结束日期介于特定日期范围之间的预订列表 如果我在MySQL中查询它,它将类似于: MySQL:Mysql 使用MongoDB和Spring数据MongoDB进行日期查询,mysql,mongodb,mongodb-query,spring-data-mongodb,Mysql,Mongodb,Mongodb Query,Spring Data Mongodb,我想搜索预订开始日期和预订结束日期介于特定日期范围之间的预订列表 如果我在MySQL中查询它,它将类似于: MySQL: SELECT * FROM MotelReservations WHERE motelId = 'ABC123' AND ( (dateStart BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59') OR (dateEnd BETWEEN '2018-12-01 00:00:00' AND '2018-12-3
SELECT * FROM MotelReservations
WHERE motelId = 'ABC123' AND (
(dateStart BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59') OR (dateEnd BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59')
)
{
"motelId": "ABC123",
???
}
{
"reservedBy": "Mang Kanor" ,
"id": "b1a7ddd3-ddfd-4624-8e85-79b47fb19f99" ,
"motelId": "ABC123" ,
"dateEnd": "2018-11-20T10:00:00" ,
"dateStart": "2018-11-20T09:00:00" ,
"summary": "Enjoy the moment in room 123"
}
但我不确定mongodb查询的等价物是什么
MongoDB:
SELECT * FROM MotelReservations
WHERE motelId = 'ABC123' AND (
(dateStart BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59') OR (dateEnd BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59')
)
{
"motelId": "ABC123",
???
}
{
"reservedBy": "Mang Kanor" ,
"id": "b1a7ddd3-ddfd-4624-8e85-79b47fb19f99" ,
"motelId": "ABC123" ,
"dateEnd": "2018-11-20T10:00:00" ,
"dateStart": "2018-11-20T09:00:00" ,
"summary": "Enjoy the moment in room 123"
}
另外,由于我将使用SpringDataMongoDB存储库方法。我想使用类似JPA的样式查询它,在这里我可以使用findAllBy…
methodname。如果不可能,我可以使用@Query
注释解决。问题是,我不确定mongo db中的查询等价物是什么
Spring数据MongoDB(存储库):
SELECT * FROM MotelReservations
WHERE motelId = 'ABC123' AND (
(dateStart BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59') OR (dateEnd BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59')
)
{
"motelId": "ABC123",
???
}
{
"reservedBy": "Mang Kanor" ,
"id": "b1a7ddd3-ddfd-4624-8e85-79b47fb19f99" ,
"motelId": "ABC123" ,
"dateEnd": "2018-11-20T10:00:00" ,
"dateStart": "2018-11-20T09:00:00" ,
"summary": "Enjoy the moment in room 123"
}
在MotelReservationDao
界面中,按方法名findAllBy…
或使用查询注释进行搜索
findallbymotelid和…(字符串motelId…)
Mongo文档示例:
SELECT * FROM MotelReservations
WHERE motelId = 'ABC123' AND (
(dateStart BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59') OR (dateEnd BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59')
)
{
"motelId": "ABC123",
???
}
{
"reservedBy": "Mang Kanor" ,
"id": "b1a7ddd3-ddfd-4624-8e85-79b47fb19f99" ,
"motelId": "ABC123" ,
"dateEnd": "2018-11-20T10:00:00" ,
"dateStart": "2018-11-20T09:00:00" ,
"summary": "Enjoy the moment in room 123"
}
MongoDb中的等价查询
可用于检索示例文档的MongoDb查询
{$and: [
{'motelId':{$eq:'ABC123'}},
{$or: [
{'dateStart':{$gte: '2018-11-01 00:00:00', $lte: '2018-12-31 23:59:59'}},
{'dateEnd':{$gte: '2018-11-01 00:00:00', $lte: '2018-12-31 23:59:59'}}
]}
]}
或使用隐式$和运算符:
{'motelId':{$eq:'ABC123'},
$or: [
{'dateStart':{$gte: '2018-11-01 00:00:00', $lte: '2018-12-31 23:59:59'}},
{'dateEnd':{$gte: '2018-11-01 00:00:00', $lte: '2018-12-31 23:59:59'}}
]}
Spring数据mongo的等价查询
我不确定您是否可以使用Spring数据方法签名创建此complexe查询。但你可以查看更多信息
1.使用@Query注释
CustomMotelReservationDAO接口
public interface CustomMotelReservationDAO {
public List<MotelReservation> findReservationByDate(String motelId, Date from1, Date from2, Date to1, Date to2);
}
公共接口CustomMotelReservationDAO{
公共列表findReservationByDate(字符串motelId,日期从1,日期从2,日期到1,日期到2);
}
CustomMotelReservationDAOImpl类
public class CustomMotelReservationDAOImpl implements CustomMotelReservationDAO {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public List<MotelReservation> findReservationByDate(String motelId, Date from1, Date from2, Date to1, Date to2){
Query query = new Query(
Criteria.where("montelId").is(motelId)
.andOperator(
Criteria.where("dateStart").gte(from1).lte(from2),
Criteria.where("dateEnd").gte(to1).lte(to2)
)
);
return mongoTemplate.find(query, MotelReservation.class)
}
公共类CustomMotelReservationDAOImpl实现CustomMotelReservationDAO{
@自动连线
私有MongoTemplate MongoTemplate;
@凌驾
公共列表findReservationByDate(字符串motelId,日期从1开始,日期从2开始,日期到1,日期到2){
查询=新查询(
标准。其中(“蒙特利德”)为(莫特利德)
.和接线员(
标准。其中(“日期开始”).gte(从1开始)。lte(从2开始),
标准.where(“dateEnd”).gte(to1.lte(to2)
)
);
返回mongoTemplate.find(查询,MotelReservation.class)
}
您能举一个MongoDB汽车旅馆文档的例子吗?添加了一个示例文档:)