Database
[{"name":"Weekdays","conditionGroups":[{"conditions":[{"type":"DayOfWeek","values":[1,2,3,4,5]},{"type":"HourIni","values":[8]},{"type":"HourEnd","values":[19]}]}]},{"name":"Nights and weekends","conditionGroups":[{"conditions":[{"type":"DayOfWeek","values":[1,2,3,4,5]},{"type":"HourIni","values":[20]},{"type":"HourEnd","values":[23]}]},{"conditions":[{"type":"DayOfWeek","values":[6,7]},{"type":"HourIni","values":[8]},{"type":"HourEnd","values":[19]}]}]},{"name":"Weekend night","conditionGroups":[{"conditions":[{"type":"DayOfWeek","values":[6,7]},{"type":"HourIni","values":[20]},{"type":"HourEnd","values":[23]}]}]}]
Query
db.collection.aggregate([{"$addFields":{"dateInput":ISODate("2021-12-13T12:00:00Z")}},{"$unwind":"$conditionGroups"},{"$addFields":{"matchedCondition":{"$map":{"input":"$conditionGroups.conditions","as":"c","in":{"$switch":{"branches":[{"case":{$and:[{$eq:["$$c.type","DayOfWeek"]},{"$in":[{"$dayOfWeek":"$dateInput"},"$$c.values"]}]},"then":true},{"case":{$and:[{$eq:["$$c.type","HourIni"]},{"$gt":[{"$hour":"$dateInput"},{"$arrayElemAt":["$$c.values",0]}]}]},"then":true},{"case":{$and:[{$eq:["$$c.type","HourEnd"]},{"$lte":[{"$hour":"$dateInput"},{"$arrayElemAt":["$$c.values",0]}]}]},"then":true}],default:false}}}}}},{"$match":{$expr:{$eq:[true,{"$allElementsTrue":"$matchedCondition"}]}}},{"$group":{"_id":"$_id"}},{"$lookup":{"from":"collection","localField":"_id","foreignField":"_id","as":"originalDocument"}},{"$unwind":"$originalDocument"},{"$replaceRoot":{"newRoot":"$originalDocument"}}])