Database
[{_id:1,"fruits":[{"fruit1":"banana"},{"fruit2":"apple"},{"fruit3":"pear"},{"fruit4":"orange"}]},{_id:2,"fruits":[{"fruit2":"apple"},{"fruit4":"orange"},{"fruit1":"banana"},{"fruit3":"pear"}]},{_id:3,"fruits":[{"fruit3":"pear"},{"fruit2":"apple"},{"fruit4":"orange"},{"fruit1":"banana"}]}]
Query
db.collection.aggregate([{"$unwind":{path:"$fruits",includeArrayIndex:"idx"}},{"$addFields":{fruits:{"$objectToArray":"$fruits"}}},{"$addFields":{"bananaIdx":{"$cond":{"if":{$eq:["banana",{$first:"$fruits.v"}]},"then":"$idx","else":"$$REMOVE"}},"appleIdx":{"$cond":{"if":{$eq:["apple",{$first:"$fruits.v"}]},"then":"$idx","else":"$$REMOVE"}}}},{$group:{_id:"$_id",fruits:{$push:{"$arrayToObject":"$fruits"}},bananaIdx:{$max:"$bananaIdx"},appleIdx:{$max:"$appleIdx"}}},{$match:{$expr:{$lt:["$bananaIdx","$appleIdx"]}}},{$unset:["bananaIdx","appleIdx"]}])