Эквивалентный запрос в 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'}}
]}
]}
Или с неявным оператором $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'}}
]}
Эквивалентный запрос для данных Spring mongo
Я не уверен, что вы можете создать этот сложный запрос, используя подпись метода Spring Data.Но вы можете посмотреть в этом разделе для получения дополнительной информации.
1.Использование аннотации @Query
@Query("{'motelId':{$eq:?0},$or: [{'dateStart':{$gte:?1, $lte:?2}},{'dateEnd':{$gte: ?3, $lte:?4}}]}")
public List<MotelReservation> findReservationByDate(String motelId, Date from1, Date from2, Date to1, Date to2);
2.Использование интерфейса MongoTemplate
MotelReservationDAO
public interface MotelReservationDAO extends MongoRepository<MotelReservation, ObjectId>,
CustomMotelReservationDAO {
}
Интерфейс CustomMotelReservationDAO
public interface CustomMotelReservationDAO {
public List<MotelReservation> findReservationByDate(String motelId, Date from1, Date from2, Date to1, Date to2);
}
Класс 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)
}