Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用MongoDB和Spring数据MongoDB进行日期查询_Mysql_Mongodb_Mongodb Query_Spring Data Mongodb - Fatal编程技术网

Mysql 使用MongoDB和Spring数据MongoDB进行日期查询

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

我想搜索预订开始日期和预订结束日期介于特定日期范围之间的预订列表

如果我在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-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汽车旅馆文档的例子吗?添加了一个示例文档:)