Database

db={"characters":[{"name":"test1","level":20,},{"name":"test2","level":40,}],"guilds":[{"members":[{"name":"test1","rank":1},{"name":"test2","rank":2}]}]}

Query

db.guilds.aggregate([{$lookup:{from:"characters",let:{members:"$members"},pipeline:[{$match:{$expr:{$in:["$name","$$members.name"]}}},{$addFields:{rank:{$reduce:{input:"$$members",initialValue:null,in:{$cond:[{$eq:["$$this.name","$name"]},"$$this.rank","$$value"]}}}}}],as:"members_t"}}])

Result