O raciocínio para o comprimento da string e o terminador nulo é duplo:compatibilidade com strings de estilo C existentes e desempenho.
Para desempenho, o MongoDB precisa ser capaz de ir rapidamente para um campo específico em um documento sem iterar por todo o BSON. Isso é importante especialmente se você estiver procurando por um campo próximo ao final de um documento grande (digamos, 16 MB). Com o comprimento da string codificada como uma das primeiras informações em um tipo de string, ele pode simplesmente pular esse número de bytes e ir para o próximo campo. Caso contrário, ele precisará iterar em toda a string até encontrar o final da string.
Para compatibilidade, o MongoDB é escrito em C++, onde as strings são null-terminated . Ele pode cortar esse terminador nulo para salvar um byte, já que o comprimento é codificado, mas obter essa string do BSON em um formato que seja utilizável pelo C++ exigiria adicionar esse nulo novamente. Isso precisará de uma rotina especializada de manipulação de strings, cuja única vantagem é economizar um único byte.
No geral, foi decidido que "desperdiçar" um único byte é uma compensação aceitável.