For each Event MongoDB document I want to find minimum value of field participantList.attendDataTo and max value of field participantList.attendDataFrom
Example of document:
{
"_id" : ObjectId("592f569e9403751fd0b3ec13"),
"_class" : "info.wkolasa.app.MeetHelp.model.Event",
"eventId" : 2,
"eventTitle" : "Dzień dziecka",
"eventDateTo" : ISODate("2017-05-29T13:55:00.466Z"),
"eventDateFrom" : ISODate("2017-05-29T09:55:00.466Z"),
"minEventPartcipants" : 2,
"eventDateConfirmTo" : ISODate("2017-05-28T13:55:00.466Z"),
"location" : "Lindego 13a",
"minEventTime" : 6,
"participantList" : [
{
"name" : "Heniek",
"surname" : "Kolasa",
"email" : "heniek.kolasa@gmail.com",
"attend" : 1,
"attendDataFrom" : ISODate("2017-05-31T12:00:00.466Z"),
"attendDataTo" : ISODate("2017-05-31T14:00:00.466Z")
},
{
"name" : "adnieszka",
"surname" : "Smyk",
"email" : "agnieszka.kolasa@gmail.com",
"attend" : 1,
"attendDataFrom" : ISODate("2017-05-31T11:30:00.466Z"),
"attendDataTo" : ISODate("2017-05-31T15:00:00.466Z")
}
]}
for test purpose i created method participantAvailability() which calculate availabilityOfParticipants based on value in field eventDateFrom in each document. I want to do something like that but for minimum value of field participantList.attendDataTo and max value of field participantList.attendDataFrom for each document.
@RequestMapping(method = RequestMethod.GET, value = "/participantAvailability")
public @ResponseBody long participantAvailability(){
Query query = new Query();
query.with(new Sort(Sort.Direction.ASC, "eventDateFrom"));
query.limit(1);
Event event = mongoTemplate.findOne(query, Event.class);
Query query1 = new Query();
query.with(new Sort(Sort.Direction.DESC, "eventDateFrom"));
query.limit(1);
Event event1 = mongoTemplate.findOne(query1, Event.class);
long availabilityOfParticipants = (event1.getEventDateFrom().getTime() - event.getEventDateFrom().getTime())/ (24 * 60 * 60 * 1000);
return availabilityOfParticipants;
}
@Document Participant:
@Document
public class Participant {
private String name;
private String surname;
private String email;
private Integer attend;
private Date attendDataFrom;
private Date attendDataTo;
//getters and setters
@Document Event:
@Document
public class Event {
@Id
private String id;
private Integer eventId;
private String eventTitle;
private Date eventDateTo;
private Date eventDateFrom;
private Integer minEventPartcipants;
private Date eventDateConfirmTo;
private String location;
private Long minEventTime;
private List<Participant> participantList = new ArrayList<>();
//getters and setters