Crie seu primeiro aplicativo .NET Core com o MongoDB Atlas
Avalie esse Início rápido
Você é um desenvolvedor .NET Core ou está tentando se tornar um e gostaria de incluir um banco de dados no mix. O MongoDB é uma ótima escolha e é muito fácil de usar em seus projetos .NET Core.
Neste tutorial, vamos explorar operações CRUD simples em um aplicativo .NET Core, algo que fará com que você se familiarize rapidamente!
Para que este tutorial cumpra sua finalidade, você precisará ter algumas coisas prontas para usar.
- .NET Core instalado e configurado.
- MongoDB Atlas cluster, M0 ou superior, implantado e configurado.
Ambos estão fora do escopo deste tutorial específico, mas você pode consultar este tutorial para obter instruções mais específicas sobre implantações do MongoDB Atlas. Você pode confirmar que o .NET Core está pronto executando o seguinte comando:
1 dotnet new console --output MongoExample
Vamos construir um aplicativo de console, mas exploraremos o desenvolvimento de API em um tutorial posterior. O projeto "MongoExample" é o que usaremos no restante deste tutorial.
Ao construir aplicativos C#, o gerenciador de pacotes comum a ser usado é o NuGet, algo que está facilmente disponível no Visual Studio. Se você estiver usando o Visual Studio, poderá adicionar o seguinte:
1 Install-Package MongoDB.Driver -Version 2.14.1
No entanto, estou em um Mac, uso uma variedade de linguagens de programação e escolhi o Visual Studio Code como o IDE ideal para mim. Não existe uma extensão oficial do NuGet para o Visual Studio Code, mas isso não significa que estamos presos.
Execute o seguinte a partir de uma CLI enquanto estiver no diretório do projeto:
1 dotnet add package MongoDB.Driver
O comando acima adicionará uma entrada ao arquivo "MongoExample.csproj" do seu projeto e baixará as dependências necessárias. Isso é importante, usando o Visual Studio Code ou não.
Se você gerou o projeto .NET Core com a CLI como eu criei, você terá um arquivo "Program.cs" com o qual trabalhar. Abra e adicione o seguinte código:
1 using MongoDB.Driver; 2 using MongoDB.Bson; 3 4 MongoClient client = new MongoClient("ATLAS_URI_HERE"); 5 6 List<string> databases = client.ListDatabaseNames().ToList(); 7 8 foreach(string database in databases) { 9 Console.WriteLine(database); 10 }
O código acima se conecta a um MongoDB Atlas cluster e depois imprime os nomes dos bancos de dados aos quais o usuário específico tem acesso. A impressão dos bancos de dados é opcional, mas pode ser uma boa maneira de garantir que tudo esteja funcionando corretamente.
Se você estiver se perguntando onde obter sua string
ATLAS_URI_HERE
, você pode encontrá-la no seu dashboard do MongoDB Atlas e clicando no botão de conexão no seu cluster.A imagem acima deve ajudar ao procurar o URI do Atlas.
Ao usar o .NET Core para trabalhar com documentos MongoDB, você pode usar a classe
BsonDocument
, mas dependendo do que você esteja tentando fazer, ela pode complicar seu aplicativo .NET Core. Em vez disso, gostaria de trabalhar com classes que são diretamente mapeadas para campos de documento. Isso me permite usar a classe naturalmente em C#, mas saiba que tudo funcionará por conta própria para documentos MongoDB.Crie um arquivo "playlist.cs" dentro do seu projeto e inclua o seguinte código C#:
1 using MongoDB.Bson; 2 3 public class Playlist { 4 5 public ObjectId _id { get; set; } 6 public string username { get; set; } = null!; 7 public List<string> items { get; set; } = null!; 8 9 public Playlist(string username, List<string> movieIds) { 10 this.username = username; 11 this.items = movieIds; 12 } 13 14 }
Na classe
Playlist
acima, temos três campos. Se você quiser que cada um desses campos mapeie perfeitamente um campo em um documento do MongoDB, não precisa fazer mais nada. Para ser claro, a classe acima mapearia para um documento parecido com o seguinte:1 { 2 "_id": ObjectId("61d8bb5e2d5fe0c2b8a1007d"), 3 "username": "nraboy", 4 "items": [ "1234", "5678" ] 5 }
No entanto, se você quiser que o campo da classe C# seja diferente do campo que ele deve mapear em um documento do MongoDB, será necessário fazer uma pequena alteração. A classe
Playlist
ficaria mais ou menos assim:1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 4 public class Playlist { 5 6 public ObjectId _id { get; set; } 7 8 [ ]9 public string user { get; set; } = null!; 10 11 public List<string> items { get; set; } = null!; 12 13 public Playlist(string username, List<string> movieIds) { 14 this.user = username; 15 this.items = movieIds; 16 } 17 18 }
Observe a nova importação e o uso de
BsonElement
para mapear um campo de documento remoto para um campo de classe local do .NET Core.Há muitas outras coisas que você pode fazer em termos de mapeamento de documentos, mas elas estão fora do escopo deste tutorial específico. Se você tiver curiosidade sobre outras técnicas de mapeamento, consulte a documentação sobre o assunto.
Como podemos nos conectar ao Atlas a partir de nosso aplicativo .NET Core e temos algum entendimento de como será nosso modelo de dados para o restante do exemplo, agora podemos trabalhar para criar, ler, atualizar e excluir (CRUD) documentos.
Vamos começar criando alguns dados. Dentro do arquivo "Program.cs" do projeto , faça com que ele fique assim:
1 using MongoDB.Driver; 2 3 MongoClient client = new MongoClient("ATLAS_URI_HERE"); 4 5 var playlistCollection = client.GetDatabase("sample_mflix").GetCollection<Playlist>("playlist"); 6 7 List<string> movieList = new List<string>(); 8 movieList.Add("1234"); 9 10 playlistCollection.InsertOne(new Playlist("nraboy", movieList));
No exemplo acima, estamos nos conectando ao MongoDB Atlas, obtendo uma referência à nossa coleção "playlist" enquanto observamos que ela está relacionada à nossa classe
Playlist
e, em seguida, fazendo uso da função InsertOne
na coleção.Se você executou o código acima, deverá ver um novo documento em sua coleção com informações correspondentes.
Então, vamos ler a partir dessa coleção usando nosso código C#:
1 // Previous code here ... 2 3 FilterDefinition<Playlist> filter = Builders<Playlist>.Filter.Eq("username", "nraboy"); 4 5 List<Playlist> results = playlistCollection.Find(filter).ToList(); 6 7 foreach(Playlist result in results) { 8 Console.WriteLine(string.Join(", ", result.items)); 9 }
No código acima, estamos criando um novo filtro
FilterDefinition
para determinar quais dados queremos retornar de nossa operação Find
. Em particular, nosso filtro fornecerá todos os documentos que tenham "nraboy" como o campo username
, que pode ser mais de um porque nunca especificamos se o campo deve ser exclusivo.Usando o filtro, podemos fazer um
Find
na coleção e convertê-lo em um List
de nossa classe Playlist
. Se você não quiser usar um List
, poderá trabalhar com seus dados usando um cursor. Você pode aprender mais sobre cursores na documentação.Com o
Find
fora do caminho, vamos passar a atualizar nossos documentos no MongoDB.Vamos adicionar ao nosso arquivo "Program.cs" com o seguinte código:
1 // Previous code here ... 2 3 FilterDefinition<Playlist> filter = Builders<Playlist>.Filter.Eq("username", "nraboy"); 4 5 // Previous code here ... 6 7 UpdateDefinition<Playlist> update = Builders<Playlist>.Update.AddToSet<string>("items", "5678"); 8 9 playlistCollection.UpdateOne(filter, update); 10 11 results = playlistCollection.Find(filter).ToList(); 12 13 foreach(Playlist result in results) { 14 Console.WriteLine(string.Join(", ", result.items)); 15 }
No código acima, estamos criando duas definições, uma sendo o
FilterDefinition
que criamos na etapa anterior. Vamos manter o mesmo filtro, mas estamos adicionando uma definição do que deve ser atualizado quando houver uma correspondência com base no filtro.Para esclarecer, vamos fazer a correspondência em todos os documentos em que "nraboy" é o campo
username
. Quando houver correspondência, queremos adicionar "5678" à array items
em nosso documento. Usando ambas as definições, podemos usar o método UpdateOne
para fazer isso acontecer.Há mais operações de atualização do que apenas a função
AddToSet
. Vale a pena conferir a documentação para ver o que é possível fazer.Isso nos leva à operação CRUD básica final. Vamos excluir o documento com o qual estamos trabalhando.
Dentro do arquivo "Program.cs", adicione o seguinte código C#:
1 // Previous code here ... 2 3 FilterDefinition<Playlist> filter = Builders<Playlist>.Filter.Eq("username", "nraboy"); 4 5 // Previous code here ... 6 7 playlistCollection.DeleteOne(filter);
Vamos usar o mesmo filtro que estamos usando, mas desta vez na função
DeleteOne
. Embora possamos ter mais de um documento retornado do nosso filtro, a função DeleteOne
excluirá apenas o primeiro. Você pode usar a função DeleteMany
se quiser excluir todos eles.Precisa ver tudo junto? Dê uma olhada nisso:
1 using MongoDB.Driver; 2 3 MongoClient client = new MongoClient("ATLAS_URI_HERE"); 4 5 var playlistCollection = client.GetDatabase("sample_mflix").GetCollection<Playlist>("playlist"); 6 7 List<string> movieList = new List<string>(); 8 movieList.Add("1234"); 9 10 playlistCollection.InsertOne(new Playlist("nraboy", movieList)); 11 12 FilterDefinition<Playlist> filter = Builders<Playlist>.Filter.Eq("username", "nraboy"); 13 14 List<Playlist> results = playlistCollection.Find(filter).ToList(); 15 16 foreach(Playlist result in results) { 17 Console.WriteLine(string.Join(", ", result.items)); 18 } 19 20 UpdateDefinition<Playlist> update = Builders<Playlist>.Update.AddToSet<string>("items", "5678"); 21 22 playlistCollection.UpdateOne(filter, update); 23 24 results = playlistCollection.Find(filter).ToList(); 25 26 foreach(Playlist result in results) { 27 Console.WriteLine(string.Join(", ", result.items)); 28 } 29 30 playlistCollection.DeleteOne(filter);
O código acima é tudo o que fizemos. Se você trocasse a string URI do Atlas pela sua própria, ela criaria um documento, o leria, o atualizaria e, finalmente, o excluiria.
Você acabou de ver como começar a usar rapidamente o MongoDB em seu aplicativo .NET Core! Embora tenhamos apenas abordado o que é possível em termos de MongoDB, isso deve preparar você melhor para atender às necessidades do seu projeto.