The BSON parser that MongoDB uses internally *only* does selective parsing. In fact it would be more correct to say it is an iterator over BSON fields than a parser of BSON objects. One of the important parts of BSON's design is that because every field is either fixed-size or prefixed with a size, it is easy to skip large swaths of BSON (eg, strings and whole subobjects) when looking for a field. This is unlike json, where you always need to examine every byte until you find your desired field. If you are curious, you can see the logic for computing field size at https://github.com/mongodb/mongo/blob/f27f82560f129f6ccd9b16fba887949ab197e678/src/mongo/bson/bsonelement.cpp#L709-L776
, which is the meat of iterating over fields.
I think many drivers offer some form of lazy bson parsing, but I'm not an expert in them, so I can't answer that definitively.
 Although it is possible to use SIMD to examine 16 or 32 bytes at a time, as is done in the paper you linked to. I'm surprised that it didn't compare itself to https://github.com/lemire/simdjson
, which appears to be approximately as fast even though it *doesn't* do selective parsing.