Acabei de chegar ao Node.js e vi que existem muitas libs para usar com o MongoDB, as mais populares parecem ser estas duas: (mongoose e mongodb). Posso obter prós e contras dessas extensões? Existem alternativas melhores para esses dois?
Edit: Encontrou uma nova biblioteca que parece também interessante node-mongolian e é "Mongolian DeadBeef é um driver node.js Mongo DB incrível que tenta se aproximar do shell mongodb." (readme.md)
https://github.com/marcello3d/node-mongolian
Isso é apenas para adicionar mais recursos para novas pessoas que visualizam isso, então basicamente Mongol é como um ODM ...
javascript
node.js
mongodb
mongoose
norman784
fonte
fonte
Respostas:
O Mongoose é de nível superior e usa o driver MongoDB (é uma dependência, verifique o package.json), então você o usará de qualquer maneira dadas essas opções. A pergunta que você deveria estar se perguntando é: "Quero usar o driver bruto ou preciso de uma ferramenta de modelagem de objeto-documento?" Se você está procurando por uma ferramenta de modelagem de objeto (ODM, uma contraparte dos ORMs do mundo SQL) para pular algum trabalho de nível inferior, você quer o Mongoose.
Se você quiser um driver, porque pretende quebrar muitas regras que um ODM pode impor, vá com MongoDB. Se você quer um driver rápido e pode viver com alguns recursos ausentes, experimente o Mongolian DeadBeef: https://github.com/marcello3d/node-mongolian
fonte
O Mongoose é, de longe, o mais popular. Eu o uso, e não usei outros. Portanto, não posso falar sobre os outros, mas posso lhe contar minhas queixas com o Mangusto.
mongooseInstace.model('MyCollection', { "_id": Number, "xyz": String })
é melhor fazer (embora o nome da coleção seja realmenteMyCollection
):mongooseInstace.model('mycollection', { "_id": Number, "xyz": String })
Mas, honestamente, é muito útil. O maior problema é a documentação. Está lá, mas é seco e difícil de encontrar o que você precisa. Ele poderia usar melhores explicações e mais exemplos. Mas uma vez que você supera essas coisas, funciona muito, muito bem.
fonte
Estou construindo um novo aplicativo e projetando agora a estrutura dele. Aqui estão algumas idéias sobre por que usar ou não o mangusto:
O driver mongodb é um driver bruto, você se comunica diretamente com o mongodb. mangusto é a camada de abstração. Você obtém E / S mais fácil para o banco de dados enquanto sua estrutura de banco de dados é simples o suficiente.
A abstração traz seus requisitos e você deve segui-los. Seu aplicativo ficará mais lento, consumirá mais RAM e será mais complicado, mas se você souber como usá-lo, poderá escrever objetos simples mais rapidamente, salvá-los no banco de dados.
Sem o mongoose, você terá uma aplicação mais rápida com conexão direta ao mongodb. Ninguém diz que você não pode escrever seus próprios modelos para salvar coisas no banco de dados. Você pode. E acho que é mais fácil. Você escreve o código, o qual usará, você sabe o que precisa. Sua camada de abstração será bem menor que a do mangusto.
Estou vindo do mundo do PHP, lá tínhamos sql bruto com funções mysql_ depreciadas, então temos PDO - camada de abstração orientada a objeto para se comunicar com sql. Ou você pode escolher algum ORM pesado como o Doctrine para ter coisas semelhantes ao mongoose no mongoDB. Objetos com método setter / getters / save e assim por diante. Tudo bem, mas ao adicionar mais abstração, você está adicionando mais arquivos, mais lógica, mais documentação, mais dependências. Gosto de manter as coisas simples e ter menos dependências na minha pilha. BTW, foi por isso que mudei de PHP para Javascript cliente-servidor em primeiro lugar.
Com o mongoose eu acho ótimo escrever alguns aplicativos simples, que têm uma estrutura de banco de dados simples semelhante ao sql . Quando você começa a ter subdocumentos e quer fazer todas aquelas pesquisas malucas, achei muito difícil com o mangusto. Você deve consultar os documentos do mongodb e, em seguida, consultar os documentos do mongoose para descobrir como fazer a consulta desejada. Algumas vezes você descobrirá que o futuro X do mongodb não está no mongoose, então você vai até o driver mongodb bruto e escreve consultas mongodb brutas em um ou outro lugar. Sem o mongoose, você olha os documentos do mongodb e faz sua consulta.
fonte
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:
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.
fonte