Database
[{"names":[{"firstname":"John","lastname":"Doe"},{"firstname":"Other","lastname":"Name"},{"firstname":"jOhN","lastname":"DoE"},{"firstname":"notJohn","lastname":"Doe"},{"firstname":"John","lastname":"notDoe"},{"firstname":"John I","lastname":"Doe II"}]}]
Query
db.collection.aggregate([{"$project":{"names":{"$filter":{"input":"$names","as":"names","cond":{"$and":[{"$regexMatch":{"input":"$$names.firstname","regex":"^John$","options":"i"}},{"$regexMatch":{"input":"$$names.lastname","regex":"^Doe$","options":"i"}}]}}}}}])