In this post, we will see how to create a WebAPI project to execute CRUD operations in a MongoDB database.
We start creating a Docker-compose file in order to define a MongoDB container and a Mongo-Express container:
[DOCKER-COMPOSE.YML]
version: '3'
services:
dockermongo:
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=admindb
- MONGO_INITDB_ROOT_PASSWORD=pass123
volumes:
- dbmongo:/data/db
networks:
- netMongoDBServer
ports:
- 27017:27017
dockermongoexpress:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admindb
- ME_CONFIG_MONGODB_ADMINPASSWORD=pass123
- ME_CONFIG_MONGODB_SERVER=dockermongo
networks:
- netMongoDBServer
volumes:
dbmongo:
driver: local
networks:
netMongoDBServer:
driver: bridge
Then, with the command docker-compose up -d, we run the docker-compose file:

Now, we will add a database called dbuser into our MongoDB instance and then, we will add a collection called users:
execution of bash command inside the container
docker exec -it composerfiles_dockermongo_1 bash

login in MongoDB
use admin
db.auth(“admindb”, passwordPrompt())

creation of a db called dbuser
use dbuser

creation of a collection called users
db.createCollection("users")

We have done and now, we will create a WebAPI project called MongoService where we will define the methods to execute CRUD operations:

First of all, we add the Mongo driver library using the command:
Install-Package MongoDB.Driver -Version 2.14.1
Then, we define an entity called User:
[USER.CS]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using System; namespace MongoService.Model.Entities { public class User { // With BsonId we define this property as primary key [BsonId] // With BsonRepresentation we will save this property as ObjectId [BsonRepresentation(BsonType.ObjectId)] public string Id { get ; set ; } public string Username { get ; set ; } public string Password { get ; set ; } // With BsonIgnore this property will not save in the Mongo document [BsonIgnore] public bool Test { get ; set ; } } } |
Now, we will add some MongoDB settings in the appsettings file and we will read them in the method ConfigureServices of Startup file:
[APPSETTINGS.JSON]
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"MongoConnect": {
"UserCollectionName": "users",
"ConnectionString": "mongodb://admindb:pass123@localhost:27017",
"DatabaseName": "dbuser"
}
}
[IMONGOCONNECT.CS]
1 2 3 4 5 6 7 8 9 | namespace MongoService.Model.MongoConnect { public interface IMongoConnect { string UserCollectionName { get ; set ; } string ConnectionString { get ; set ; } string DatabaseName { get ; set ; } } } |
[MONGOCONNECT.CS]
1 2 3 4 5 6 7 8 9 | namespace MongoService.Model.MongoConnect { public class MongoConnect : IMongoConnect { public string UserCollectionName { get ; set ; } public string ConnectionString { get ; set ; } public string DatabaseName { get ; set ; } } } |
[STARTUP.CS]
1 2 3 4 5 6 7 8 9 10 11 12 13 | public void ConfigureServices(IServiceCollection services) { services.Configure<MongoConnect>( Configuration.GetSection(nameof(MongoConnect))); services.AddSingleton<IMongoConnect>(sp => sp.GetRequiredService<IOptions<MongoConnect>>().Value); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc( "v1" , new OpenApiInfo { Title = "MongoService" , Version = "v1" }); }); } |
Then, we define a service layer called UserService to manage CRUD operation in MongoDB:
[USERSERVICE.CS]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | using MongoDB.Driver; using MongoService.Model.Entities; using MongoService.Model.MongoConnect; using System.Collections.Generic; namespace MongoService.Service { public class UserService { // definition of User collection private readonly IMongoCollection<User> _users; public UserService(IMongoConnect settings) { // definition MongoDB client var client = new MongoClient(settings.ConnectionString); // get MongoDB database var database = client.GetDatabase(settings.DatabaseName); // feed the collection _users = database.GetCollection<User>(settings.UserCollectionName); } public List<User> GetAllUsers() => _users.Find(user => true ).ToList(); public User GetUserById( string id) => _users.Find<User>(user => user.Id == id).FirstOrDefault(); public User AddUser(User user) { _users.InsertOne(user); return user; } public void UpdateUser( string id, User userInput) => _users.ReplaceOne(user => user.Id == id, userInput); public void RemoveUser( string id) => _users.DeleteOne(user => user.Id == id); } } |
[STARTUP.CS]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public void ConfigureServices(IServiceCollection services) { services.Configure<MongoConnect>( Configuration.GetSection(nameof(MongoConnect))); services.AddSingleton<IMongoConnect>(sp => sp.GetRequiredService<IOptions<MongoConnect>>().Value); services.AddSingleton<UserService>(); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc( "v1" , new OpenApiInfo { Title = "MongoService" , Version = "v1" }); }); } |
Finally, we create a controller called UserController:
[USERCONTROLLER.CS]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | using Microsoft.AspNetCore.Mvc; using MongoService.Model.Entities; using MongoService.Service; using System.Collections.Generic; namespace MongoService.Controllers { [Route( "api/[controller]" )] [ApiController] public class UserController : ControllerBase { private readonly UserService _userService; public UserController(UserService userService) { _userService = userService; } [HttpGet] public ActionResult<List<User>> GetAllUser() => _userService.GetAllUsers(); [HttpGet( "{id}" , Name = "GetUser" )] public ActionResult<User> GetUserById( string id) { var user = _userService.GetUserById(id); if (user == null ) { return NotFound(); } return user; } [HttpPost] public ActionResult<User> AddUser(User user) { _userService.AddUser(user); return CreatedAtRoute( "GetUser" , new { id = user.Id }, user); } [HttpPut( "{id}" )] public IActionResult UpdateUser( string id, User userInput) { var user = _userService.GetUserById(id); if (user == null ) { return NotFound(); } _userService.UpdateUser(id, userInput); return NoContent(); } [HttpDelete( "{id}" )] public IActionResult DeleteUser( string id) { var user = _userService.GetUserById(id); if (user == null ) { return NotFound(); } _userService.RemoveUser(user.Id); return NoContent(); } } } |
We have done and now, if we run the service, these will be the results:

GET ALL USERS

GET USER BY ID

ADD USER


UPDATE USER


DELETE USER


MONGOSERVICE – CODE
https://github.com/ZoneOfDevelopment/MongoService