Na página inicial do Mongoose:
O Mongoose fornece uma solução direta e baseada em esquema para modelar seus dados de aplicativo e inclui conversão de tipos, validação, construção de consultas, ganchos de lógica de negócios e muito mais, prontos para uso.
O Mongoose não pode inferir um esquema de uma coleção de documentos potencialmente exclusivos. O MongoDB não impõe esquema nos documentos armazenados em uma coleção.
Então, o Mongoose adiciona uma camada no driver nativo do NodeJS (aqui) que muitos acham mais produtivo. Não é um requisito para usar com o MongoDB ao usar o Node.JS.
O Mongoose precisa fundamentalmente de duas coisas para funcionar:
- Esquema ==define a estrutura do documento (referência). Você pode adicionar validação, novos métodos, adicionar propriedades virtuais, usar tipos de dados, estabelecer referências a outras coleções (modelos).
- Model ==esta é a classe que é usada em tempo de execução para expressar consultas em coleções (referência). Uma definição de esquema é usada para construir um modelo.
Então, como você viu no exemplo que você colou, há um gatinho
Schema
definido e, em seguida, um Model
Kitten
é criado. O que é bom em usar um esquema e modelo é que o Mongoose impõe as propriedades/campos que estão disponíveis. Você só define o
Schema
se Model
s uma vez em um aplicativo. Portanto, geralmente quando o aplicativo é iniciado, você precisará executar o código para defini-los e, em seguida, usar o Model
instâncias conforme necessário durante todo o ciclo de vida do aplicativo. Há muitas outras razões pelas quais você deseja usar o Mongoose potencialmente.
Você está absolutamente certo, porém, você poderia usar algo mais direto, sem um esquema, usando o driver nativo do NodeJS. A sintaxe seria semelhante à que você mostrou, mas um pouco mais complexa:
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(err) { return console.dir(err); }
var collection = db.collection('kittens');
collection.find().toArray(function(err, kittens) {
// here ...
});
});
Ao invés do simples:
Kitten.find(function(err, kittens) {
});
Além disso, ao usar o Mongoose, você pode descobrir que escrever consultas mais complexas é mais fácil de escrever e ler:
Kitten.find().where('name', 'Harold').exec(/*callback*/);
Eu sugiro ler mais da documentação para ter uma ideia melhor da estrutura e se ela é uma boa combinação para suas necessidades. A documentação está um pouco espalhada, infelizmente, mas se você percorrer os subtítulos do
Guide
título, você terá um monte de boas informações disponíveis.