Database
[{"name":"Banana","variants":[{"color":"blue","props":[]},{"color":"green","props":[{"uid":1,"grade":3},{"uid":3,"grade":2}]}]}]
Query
db.collection.aggregate([{$set:{variants:{$sortArray:{input:{$map:{input:"$variants",in:{$mergeObjects:["$$this",{length:{$size:"$$this.props"}}]}}},sortBy:{length:-1}}}}},{$unset:["variants.length"]}])