Você pode incluir os dois termos de ID em uma única consulta e a projeção de elemento único ainda funcionará:
Person.findOne({_id: personId, 'things.id': 2}, {'things.$': 1},
function(err, person) { ...
Person.findOne({_id: personId, 'things.id': 2}, {'things.$': 1},
function(err, person) { ...