Database
[{"key":1,"fname":"Bob","lname":"Smith","tags":["a","b","c"]},{"key":2,"fname":"John","lname":"Jacob","tags":["c","d","e"]},{"key":3,"fname":"Will","lname":"Smith","tags":["a","b","c"]}]
Query
db.collection.aggregate([{$match:{$or:[{"fname":"Will"},{"lname":"Smith"},{tags:{$in:["b","c"]}}]}},{$project:{tagsMatchCount:{$size:{"$setIntersection":[["b","c"],"$tags"]}}}},{"$sort":{tagsMatchCount:-1}}])