O MongoDB é um banco de dados NoSQL sem esquema com estruturas de documentos flexíveis, ao contrário dos bancos de dados SQL. Usar o MongoDB como banco de dados traz muitos benefícios, desde fácil dimensionamento até recursos modernos de banco de dados, como transações.

O MongoDB também suporta bibliotecas de modelagem de dados de objetos (ODM) como Mongoose. Os ODMs gerenciam relacionamentos de dados, validam esquemas e convertem objetos em modelos de dados. Eles facilitam a interação com um banco de dados MongoDB.

Em algumas etapas, você aprenderá a usar o MongoDB em um aplicativo NestJS com o pacote NestJS mongoose dedicado.

Etapa 1: instalando dependências

Antes de usar o Mongoose em seu aplicativo NestJS, você deve instalá-lo junto com seu pacote NestJS nativo.

Instale o mongoose e seu pacote nativo NestJS usando o gerenciador de pacotes npm Correndo:

npm instalar @nestjs/mangusto mangusto

Etapa 2: Conectando-se ao MongoDB

Quando a instalação terminar, navegue até o seu app.module.ts Arquivo. Em seguida, importe Módulo Mangusto a partir de @ninho/mangusto:

importar { MongooseModule } a partir de '@nestjs/mangusto';

Em seguida, em sua matriz de importações, chame o forRoot método em Módulo Mangusto e passe seu URI do MongoDB como um argumento:

importações: [MongooseModule.forRoot (process.env. MONGODB_URI)],

o forRoot O método compartilha a conexão com o banco de dados por meio de todos os módulos em seu aplicativo. Leva um objeto de configuração opcional; você pode aprender mais sobre isso em do mangusto documentação de opções.

Etapa 3: criando um esquema de mangusto

Um esquema é um objeto JSON que define a estrutura e o conteúdo de seus dados. Você precisará criar um para definir como o Mongoose armazena seus dados no banco de dados MongoDB.

No módulo raiz do seu aplicativo, crie um "esquemas" pasta. Esta pasta é onde você armazenará todos os seus arquivos de esquema.

Dentro do seu esquemas pasta, crie um arquivo de esquema e nomeie-o usando a convenção de nomenclatura NestJS (.schema.ts).

Em seguida, adicione as seguintes importações ao seu arquivo de esquema:

importar { Prop, Schema, SchemaFactory } a partir de "@nestjs/mangusto";
importar { Documento } a partir de "mangusto";

o Suporte decorator marca as propriedades que anota como uma propriedade em seu banco de dados MongoDB.

o Esquema decorador marca a classe que anota como um esquema.

o SchemaFactory A classe contém métodos estáticos usados ​​para criação de modelo.

O mangusto Documento representa um mapeamento um para um para documentos armazenados no MongoDB. Você precisará dele como uma anotação de tipo.

Então, criar uma classe, anote-o com o Esquema decorador para marcá-lo como um esquema Mongoose e exportá-lo:

@Esquema()
exportarclasseDemonstração{}

Em seguida, crie e exporte um tipo de união com sua classe e Documento:

exportarmodelo DemoDocument = Demo & Documento;

Em seguida, adicione as propriedades desejadas à classe e anote-as com o Suporte decorador. Você pode passar um objeto de configuração opcional para o Suporte decorador e defina a propriedade conforme necessário:

@Esquema()
exportarclasseDemonstração{
@Suporte({ requeridos: verdadeiro })
propriedade_1: string;
}

o Mangusto documentação cobre o objeto de configuração em mais detalhes.

Finalmente, crie e exporte um modelo Mongoose através do SchemaFactoryde createForClass e passe sua classe como um argumento:

exportarconst DemoSchema = SchemaFactory.createForClass (Demo);

Seu esquema completo deve ficar assim:

importar { Prop, Schema, SchemaFactory } a partir de '@nestjs/mangusto';
importar { Documento } a partir de 'mangusto';

exportarmodelo DemoDocument = Demo & Documento;

@Esquema()
exportarclasseDemonstração{
@Suporte({ requeridos: verdadeiro })
propriedade_1: string;

@Suporte({ requeridos: verdadeiro })
propriedade_2: número;

@Suporte()
propriedade_3: string;

@Suporte({ requeridos: verdadeiro })
propriedade_4: boleano;
}

exportarconst DemoSchema = SchemaFactory.createForClass (Demo);

Etapa 4: registrando o esquema

Navegue até a pasta do seu módulo e adicione as seguintes importações:

importar { MongooseModule } a partir de '@nestjs/mangusto';
importar { Demo, DemoSchema } a partir de '../schemas/demo.schema';

Em seguida, crie um “importações” matriz dentro do @módulo decorador. Então, dentro do array, chame o paraRecurso método em Módulo Mangusto.

o paraRecurso O método leva em uma matriz de modelos Mongoose. Passe um objeto de configuração com um nome propriedade definida para o nome de sua classe de esquema e um esquema propriedade definida para o esquema criado:

Módulo Mangusto.forRecurso([{ nome: Demo.name, esquema: DemoSchema }]),

Passo 5: Injetando o Modelo Mongoose

Em seguida, você precisará injetar o Modelo do Mongoose para habilitar a consulta do seu banco de dados chamando os métodos do Mongoose no modelo.

Navegue até a classe de serviço do seu módulo e adicione as seguintes importações:

importar { Modelo } a partir de 'mangusto';
importar { InjectModel } a partir de '@nestjs/mangusto';
importar { Demo, DemoDocument } a partir de '../schemas/demo.schema';

Use o Modelo interface como uma definição de tipo para seu modelo, dando acesso aos métodos do Mongoose.

o InjectModel decorator injeta o modelo Mongoose no construtor da sua classe de serviço.

A seguir, crie um construtor dentro de sua classe de serviço. Deve demorar um privado variável como argumento, um Modelo com um tipo genérico de DemoDocument. Anote sua variável privada com o InjectModel decorator e passe o nome da sua classe de esquema como argumento:

@Injetável()
exportarclasseServiço de demonstração{
construtor(
@InjectModel(Demo.name)
private demoModel: Model<DemoDocument>,
) {}
}

Você pode consultar seu banco de dados MongoDB chamando métodos Mongoose em sua variável privada (demoModel).

Vantagens de usar o MongoDB

Além de sua forte comunidade online e facilidade de uso, o MongoDB oferece alta disponibilidade e estabilidade de dados. Ele oferece análises aceleradas, agregação de dados e muito mais, tornando-o o banco de dados ideal para seus projetos.