Если вы пытаетесь преобразовать ваш конвейер агрегации в код Java MongoDB Compass сделает это за вас, используя опцию экспорт на язык .Вот твой код
import java.util.Arrays;
import org.bson.Document;
import org.bson.BsonNull;
Arrays.asList(new Document("$match",
new Document("$and", Arrays.asList(new Document("schedule.startDate",
new Document("$in", Arrays.asList(new java.util.Date(1605483000000L),
new java.util.Date(1574557200000L),
new java.util.Date(1595804400000L)))),
new Document("schedule.status", "AVAILABLE")))),
new Document("$unwind", "$schedule"),
new Document("$project",
new Document("_id", 1L)
.append("status", "$schedule.status")
.append("startDate", "$schedule.startDate")
.append("week",
new Document("$concat", Arrays.asList(new Document("$toString",
new Document("$isoWeek", "$schedule.startDate")), "-",
new Document("$toString",
new Document("$isoWeekYear", "$schedule.startDate")))))
.append("duration",
new Document("$literal", 0.5d))),
new Document("$group",
new Document("_id",
new Document("id", "$_id")
.append("week", "$week")
.append("status", "$status"))
.append("startDate",
new Document("$addToSet",
new Document("$cond", Arrays.asList(new Document("$eq", Arrays.asList("$status", "AVAILABLE")), "$startDate",
new BsonNull()))))
.append("bookedDuration",
new Document("$sum", "$duration"))),
new Document("$project",
new Document("_id", 1L)
.append("availableSlots",
new Document("$setIntersection", Arrays.asList(Arrays.asList(new java.util.Date(1605483000000L),
new java.util.Date(1574557200000L),
new java.util.Date(1595804400000L)), "$startDate")))
.append("bookedDuration",
new Document("$cond", Arrays.asList(new Document("$eq", Arrays.asList("$_id.status", "BOOKED")), "$bookedDuration", 0L)))),
new Document("$unwind",
new Document("path", "$availableSlots")
.append("preserveNullAndEmptyArrays", true)),
new Document("$group",
new Document("_id",
new Document("id", "$_id.id")
.append("week", "$_id.week"))
.append("availableSlots",
new Document("$addToSet", "$availableSlots"))
.append("bookedDuration",
new Document("$sum", "$bookedDuration"))),
new Document("$match",
new Document("$and", Arrays.asList(new Document("bookedDuration",
new Document("$lt", 20L)),
new Document("availableSlots",
new Document("$not",
new Document("$size", 0L)))))),
new Document("$unwind", "$availableSlots"),
new Document("$group",
new Document("_id", "$_id.id")
.append("availableSlots",
new Document("$addToSet", "$availableSlots"))))