.NET中MongoDB的CRUD操作实现指南

在本文中,将探讨如何通过.NET实现MongoDB数据库的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作。MongoDB是一个基于文档的NoSQL数据库,广泛用于存储和管理JSON格式的数据。将使用MongoDB官方提供的.NET驱动程序来实现这些操作。

为了与MongoDB进行交互,需要使用MongoDB团队开发的NuGet包。这些包提供了一系列的预定义类,将利用这些类来与MongoDB进行交互。这些类将负责大部分的开发工作,如打开和关闭连接、维护连接池等,从而使.NET代码更加可读和易于维护。

BSON简介

BSON(Binary JSON)是一种二进制编码的JSON-like文档序列化格式。与JSON一样,BSON支持在其他文档和数组中嵌入文档和数组。以下是关于JSON和BSON的白皮书。

创建(插入)文档

要插入单个文档,可以使用以下代码。在运行此代码之前,请确保MongoDB实例正在运行。还可以更改连接字符串以指向MongoDB服务器。在这里,从MongoDB获取测试数据库,并添加一个BsonDocumentpeople表中。当不知道确切的表集合类型时,可以使用BsonDocument类型。创建文档后,通过调用InsertOneAsync方法将其添加到people集合中。此方法将仅在表中添加一个文档。

static async Task MainAsync(string[] args) { var ConnectionString = "mongodb://localhost:27017"; var client = new MongoClient(ConnectionString); var db = client.GetDatabase("test"); var col = db.GetCollection("people"); var doc = new BsonDocument { { "Name", "test" }, { "Age", 33 } }; await col.InsertOneAsync(doc); }

要添加多个文档,可以使用以下代码。在这里,创建了两个BsonDocuments并将它们添加到表集合中,使用的是InsertManyAsync方法。

static async Task MainAsync(string[] args) { var ConnectionString = "mongodb://localhost:27017"; var client = new MongoClient(ConnectionString); var db = client.GetDatabase("test"); var col = db.GetCollection("people"); var doc = new BsonDocument { { "Name", "test" }, { "Age", 33 } }; var doc2 = new BsonDocument { { "Name", "Hi" }, { "Profession", "PM" } }; await col.InsertManyAsync(new[] { doc, doc2 }); }

除了使用BsonDocument,还可以添加自己的类类型文档。需要创建一个类,并创建该类类型的文档,然后以类似的方式添加。

检索文档

可以通过两种方式来实现这一点。第一种方式是使用游标,这是最有效的方法。游标是Mongo驱动程序和服务器之间通信的方式,服务器会以批次的形式将它们发送回来。以下是从people集合中获取文档的代码。

static async Task MainAsync(string[] args) { var ConnectionString = "mongodb://localhost:27017"; var client = new MongoClient(ConnectionString); var db = client.GetDatabase("test"); var col = db.GetCollection("people"); using (var cursor = await col.Find(new BsonDocument()).ToCursorAsync()) { while (await cursor.MoveNextAsync()) { foreach (var doc in cursor.Current) { Console.WriteLine(doc); } } } }

还有一种更简单、更干净、更快的方法来从数据库中检索数据。然而,它会将所有文档保留在内存中,因此可能不适用于某些场景。但是,当知道集合中有一个或几个文档时,它将非常有用。

static async Task MainAsync(string[] args) { var ConnectionString = "mongodb://localhost:27017"; var client = new MongoClient(ConnectionString); var db = client.GetDatabase("test"); var col = db.GetCollection("people"); var list = await col.Find(new BsonDocument()).ToListAsync(); foreach (var doc in list) { Console.WriteLine(doc); } }

上述两种方法展示了如何从集合中检索所有文档。如果想检索特定文档,可以使用过滤器,所有满足条件的文档都将被返回。有一个构建器助手类可以用来创建过滤器。

更新

这进一步分为两个类别:替换和更新。首先,让看看如何在MongoDB中替换文档。当替换文档时,不能替换ID字段。

static async Task MainAsync(string[] args) { var ConnectionString = "mongodb://localhost:27017"; var client = new MongoClient(ConnectionString); var db = client.GetDatabase("test"); var col = db.GetCollection("people"); await col.ReplaceOneAsync(new BsonDocument("name", "Simon"), new BsonDocument("name", "Juli")); await col.Find(new BsonDocument()).ForEachAsync(X => Console.WriteLine(X)); }

上述代码将将people集合中的名称从Simon更改为Juli。以下是另一个示例代码,根据条件更新记录。在这里,它将名为Simon的人的年龄增加10岁。

static async Task MainAsync(string[] args) { var ConnectionString = "mongodb://localhost:27017"; var client = new MongoClient(ConnectionString); var db = client.GetDatabase("test"); var col = db.GetCollection("people"); await col.UpdateOneAsync(Builders.Filter.Eq("name", "Simon"), Builders.Update.Inc("Age", 10)); await col.Find(new BsonDocument()).ForEachAsync(X => Console.WriteLine(X)); }

同样,也可以使用方法UpdateManyAsync来更新多个文档。

删除

从MongoDB中删除记录有两种方法:DeleteManyAsyncDeleteOneAsync。顾名思义,一个用于删除单个记录,另一个用于删除多个记录。

await col.DeleteOneAsync(Builders.Filter.Eq("name", "test1"));

注意:在运行上述所有代码之前,MongoDB服务器实例应该正在运行。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485