Database
db={"fruits":[{"_id":11,"item":"apples","colour":"red"},{"_id":22,"item":"bananas","colour":"yellow"}],"vegetables":[{"_id":900,"item":"celery","colour":"green"},{"_id":901,"item":"carrots","colour":"orange"}],"produce":[{_id:2,produceItems:[]},{"_id":1,"produceItems":[{"itemType":"fruit","item":111,"quantity":4},/** {* "itemType": "vegetable",* "item": 910,* "quantity": 1* }*/]}]}
Query
db.produce.aggregate([{$unwind:{path:"$produceItems",preserveNullAndEmptyArrays:true}},{$lookup:{from:"fruits",localField:"produceItems.item",foreignField:"_id",as:"fruitProperties"}},{$lookup:{from:"vegetables",localField:"produceItems.item",foreignField:"_id",as:"vegetableProperties"}},{$addFields:{"produceItems.properties":{$ifNull:[{$first:"$fruitProperties"},{$first:"$vegetableProperties"}]}}},{$addFields:{produceItems:{$cond:{if:{$eq:["$produceItems",{}]},then:"$$REMOVE",else:"$produceItems"}}}},{$group:{_id:"$_id",produceItems:{$push:"$produceItems"}}}])