02.MongoDB 增查改删 - C#
一、前言
本文介绍如何使用官方的C# MondoDB Driver进行CRUD操作。
C# Driver:MongoDB C#/.NET Driver — MongoDB Drivers
更多语言Driver:Start Developing with MongoDB — MongoDB Drivers
二、内容
环境介绍
1.Visual Studio 2022
2…Net 6.0
3.MongoDB.Driver 2.17.1
第一步:安装Nuget包
安装Nuget包:MongoDB.Driver

第二步:建立连接
MongoDB的默认端口是27017
// 使用连接字符串连接
var client = new MongoClient("mongodb://localhost:27017");
第三步:使用数据库
使用名为bookdb的数据库,如果没有则会在第一次使用时自动创建该数据库
// 使用名为bookdb的数据库,如果没有则会在第一次使用时自动创建该数据库
var database = client.GetDatabase("bookdb");
第四步:使用集合
集合类似于关系数据库中的表。
此例使用名为books的集合,如果没有则会在第一次使用时自动创建该集合。
这里使用了BsonDocument来作为获取的集合的泛型参数,
当集合是动态时,会使用此类型,
一般情况下会使用自定义类作为泛型参数,使用自定义类时需要进行类映射,之后再做进一步介绍。
// 使用名为books的集合,如果没有则会自动创建该集合
var collection = database.GetCollection<BsonDocument>("books");
第五步:插入文档
文档类似于关系数据库中的一行记录。
1.插入一条记录
使用InsertOne或InsertOneAsync插入一个文档。
var book = new BsonDocument
{
{ "name", "凡人修仙传" },
{ "isbn", "9787806807583" },
{ "price", 280 },
};
// 插入文档
collection.InsertOneAsync(book);
2.插入多条记录
使用InsertMany或InsertManyAsync插入多个文档。
var book1 = new BsonDocument
{
{ "name", "斗破苍穹" },
{ "isbn", "9787535381668" },
{ "price", 695 },
};
var book2 = new BsonDocument
{
{ "name", "斗罗大陆" },
{ "isbn", "9787806806890" },
{ "price", 364 },
};
// 插入多个文档
collection.InsertMany(new List<BsonDocument> { book1, book2 });
第六步:查询文档
1.查找所有文档
使用Find或FindAsync查找文档。
// 查找所有文档
var documents = collection.Find(new BsonDocument()).ToList();
Console.WriteLine(documents.Count); // 输出:3
2.迭代处理文档
如果文档数量很大,则可以使用ForeachAsync查找文档
// 迭代处理多个文档
await collection.Find(new BsonDocument()).ForEachAsync(doc =>
{
Console.WriteLine(doc);
});
输出内容如下:

3.条件筛选单个文档
Eq:Equals简写。
// 条件筛选单个文档
// 查找名称为"凡人修仙传"的书籍
var filter = Builders<BsonDocument>.Filter.Eq("name", "凡人修仙传");
var doc = collection.Find(filter).First();
Console.WriteLine(doc);
输出内容如下:

4.条件筛选多个文档
Gt:Greater than,大于。
// 条件筛选多个文档
// 查找价格大于300的书籍
var filter = Builders<BsonDocument>.Filter.Gt("price", 300);
await collection.Find(filter).ForEachAsync(doc =>
{
Console.WriteLine(doc);
});
输出结果:

第七步:修改文档
使用UpdateOne或UpdateOneAsync修改单个文档。
1.修改单个文档
// 查找名称为"凡人修仙传"的书籍
var filter = Builders<BsonDocument>.Filter.Eq("name", "凡人修仙传");
// 修改价格为360
var update = Builders<BsonDocument>.Update.Set("price", 360);
// 修改单个文档
collection.UpdateOne(filter, update);
2.修改多个文档
使用UpdateMany或UpdateManyAsync修改多个文档。
// 查找价格大于360的书籍
var filter = Builders<BsonDocument>.Filter.Gt("price", 360);
// 修改价格为400
var update = Builders<BsonDocument>.Update.Set("price", 400);
// 修改多个文档
collection.UpdateMany(filter, update);
第八步:删除文档
1.删除单个文档
使用DeleteOne或DeleteOneAsync删除单个文档。
// 查找名称为"凡人修仙传"的书籍
var filter = Builders<BsonDocument>.Filter.Eq("name", "凡人修仙传");
// 删除单个文档
collection.DeleteOne(filter);
2.删除多个文档
使用DeleteMany或DeleteManyAsync删除多个文档。
// 查找价格大于360的书籍
var filter = Builders<BsonDocument>.Filter.Gt("price", 360);
// 删除多个文档
collection.DeleteMany(filter);
第九步:其他操作
1.统计文档
使用CountDocuments或CountDocumentsAsync统计文档数量。
// 统计文档数量
var count = collection.CountDocuments(new BsonDocument());
2.文档排序
// 筛选包含价格的数据
var filter = Builders<BsonDocument>.Filter.Exists("price");
// 按价格倒序排列
var sort = Builders<BsonDocument>.Sort.Descending("price");
// 对文档进行排序
await collection.Find(filter).Sort(sort).ForEachAsync(doc =>
{
Console.WriteLine(doc);
});
输出结果:

三、后语
至此,已完成使用官方的C# MondoDB Driver进行简单的CRUD操作。