NoSQL データベースの一種である MongoDB は、Azure Cosmos DB や MongoDB Atlas などで Free Tier があります。

RDBMS が得意とする高度なトランザクション処理が不要なアプリケーションでは、コストやパフォーマンスが良いイメージです。

そこで、.NET 8 コンソールアプリで MongoDB の Insert Update Find Delete を試してみました。

検証用の MongoDB を Docker で用意

$ docker run -d \
  --name mongo \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
  -e MONGO_INITDB_ROOT_PASSWORD=secretpass \
  mongo

検証用の MongoDB の動作確認

$ mongosh \
  -u mongoadmin \
  -p secretpass \
  --authenticationDatabase admin \
  testdb

testdb> show databases
admin   100.00 KiB
config   12.00 KiB
local    40.00 KiB

testdb> quit

MongoDB の接続情報を環境変数にセット

$ export MONGO_CONNECTION_STRING=mongodb://mongoadmin:secretpass@localhost:27017

検証用の .NET 8 コンソールアプリを作成

$ dotnet new console -n MnrMongo

$ cd MnrMongo

$ dotnet run
Hello, World!

.NET に MongoDB パッケージを追加

$ dotnet add package MongoDB.Driver

MongoDB 用のコードに書き換え

code Program.cs
using MongoDB.Driver;
using MongoDB.Bson;

var connectionString = Environment.GetEnvironmentVariable("MONGO_CONNECTION_STRING");
var client = new MongoClient(connectionString);
var database = client.GetDatabase("testdb"); 
var collection = database.GetCollection<BsonDocument>("users");

// Insert
var document = new BsonDocument
{
    { "name", "James" },
    { "age", 30 }
};
collection.InsertOne(document);
Console.WriteLine($"Insert: {document["_id"]}");

// Update
var filter = Builders<BsonDocument>.Filter.Eq("name", "James");
var update = Builders<BsonDocument>.Update.Set("age", 31);
var updateResult = collection.UpdateOne(filter, update);
Console.WriteLine($"updateResult: {updateResult.MatchedCount}, Modified: {updateResult.ModifiedCount}");

// Find
var documents = collection.Find(filter).ToList();
foreach (var doc in documents)
{
    Console.WriteLine($"Find: {doc}");
}

// Delete
var result = collection.DeleteOne(filter);
Console.WriteLine($"Deleted: {result.DeletedCount}");

.NET 8 コンソールアプリの動作確認

$ dotnet run
Insert: 678302b7e02ff85914dbc429
updateResult: 1, Modified: 1
Find: { "_id" : { "$oid" : "678302b7e02ff85914dbc429" }, "name" : "James", "age" : 31 }
Deleted: 1

MongoDB の後片付け

$ docker stop mongo

$ docker rm mongo

$ docker rmi mongo

参考

クイック スタート

クイック リファレンス

MongoDB .NET/C# Driver API Reference