Eu usei apenas mongodb. Na minha opinião pessoal, eu recomendaria começar com algo de baixo nível e depois subir. Caso contrário, você pode acabar usando os recursos avançados adicionais fornecidos por drivers de nível superior, como o mongoose, sem nenhum benefício real.
O problema que tive com o mongodb, que é endêmico para node.js, é a documentação deficiente. Existe documentação e muita, mas nem sempre é a mais útil. Que eu vi até agora, não há exemplos bons e completos de uso do driver na produção. A documentação é preenchida com o mesmo modelo de exemplo de abrir uma conexão, emitir um comando e fechar a conexão. Você pode saber se é copiado e colado de um modelo porque cada exemplo inclui o necessário para tudo o que pode ser necessário, em vez de apenas o que é necessário para cada exemplo.
Para dar um exemplo tomado inteiramente ao acaso:
- raw {Boolean, default: false}, executa operações usando buffers bson brutos.
O que exatamente "executar operações usando buffers bson brutos" faz? Não consigo encontrar uma explicação em nenhum lugar e uma pesquisa no Google por essa frase não ajuda. Talvez eu pudesse pesquisar mais no Google, mas não deveria. A informação deve estar lá. Existe alguma vantagem de desempenho, estabilidade, integridade, compatibilidade, portabilidade ou funcionalidade para ativar / desativar esta opção? Eu realmente não tenho ideia sem mergulhar profundamente no código e se você estiver no meu barco, isso é um problema sério. Eu tenho um daemon onde a persistência perfeita não é necessária, mas o programa precisa ser muito estável em tempo de execução. Eu poderia supor que isso significa que ele espera que eu desserialize e serialize para JSON ou é algo de baixo nível, interno e transparente para o usuário, mas posso estar errado. Embora eu tendo a fazer boas suposições, não posso confiar em suposições e suposições ao fazer sistemas vitais. Portanto, aqui posso testar minha afirmação com código ou me aprofundar no Google ou no código deles. Como uma pessoa isolada, isso não é tão ruim, mas eu me encontro nessa situação muitas vezes ao ler sua documentação. A diferença pode significar dias gastos em uma tarefa versus horas. Preciso de confirmação e a documentação quase não me dá explicação, muito menos confirmação.
A documentação é apressada. Ele não explica eventos, dá detalhes vagos sobre quando os erros são lançados ou a natureza desses erros e, muitas vezes, há várias maneiras de realizar a conectividade que podem não ser claras. Você pode sobreviver e não é completamente inútil, mas é muito difícil nas bordas. Você descobrirá que algumas coisas são deixadas para adivinhação e experimentação.