There are certain aspects about the MD5 hash that are quite difficult to understand from reading the docs and the driver source.
First and probably most importantly: what is the actual use of the MD5 hash? It gets written when a whole file is persisted, however (from looking at the java driver) there is no real use of it when reading the file. Is it used by mongodb internally? If so, when and what happens if it is missing?
I have came along some third party implementations that implement features that the mongodb driver is missing, however they don't store the MD5. I was wondering if this may lead to any conflicts (now and in the future).
A lot of times only a few chunks of a file is needed. In those cases there does not seem any good use for the MD5 hash, except it would be used internally.
Lastsly, the MD5 hash prevents uploading of files to a web server in chunks and/or resuming failed uploads (unless that is entirely handled by the application server, which may introduce quite some overhead). The only workaround I can think of (while maintaining the MD5) is that the chunk that is uploaded last, triggers the calculation of the MD5. However, what is the use of the MD5 then, if we are only calculation a hash over what already has been persisted? To check if mongodb didn't lose any chunks over time? Does not seem very likely...
Interestingly the MD5 is not listed as optional in the manual [1], however this post does omit the MD5 entirely when explaining the content of the files collection [2]. It however mentions that the MD5 is compared upon insert, however from looking at java driver, this seems to be the responsibility of the application using the driver.