猿教程 Logo

.Net连接MongoDb:使用MongoDb驱动执行批量写入

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

介绍

在上一篇文章中,我们讨论了如何使用MongoDb .NET驱动程序删除文档。 毕竟,我们已经了解了过滤器定义和各种选项,这是很容易的,通过各种与删除相关的功能。

我们已经涵盖了.NET中的所有CRUD操作。 在我们继续之前,我想再显示一个与CRUD相关的数据库操作选项:批量写入。

批量写入

批量写入是一种操作,我们同时向数据库发送多个插入,更新或删除命令。 重要的是要记住,批量写入中的各个命令不是以顺序方式一个接一个地执行,而是并行地发送到数据库以执行。 我们实际上已经使用大量写作,但我们不知道。 插入,更新和删除操作都在引擎盖下使用批量写入。

我们还可以发布我们自己的批量写入数据库,我们可以混合各种插入,更新和删除操作。 操作包含专用的Model对象,如InsertOneModel,DeleteManyModel,UpdateOneModel等。

以下示例将插入两个新的餐馆,更新现有餐馆,并删除其他现有餐馆。 它还演示了BulkWriteOptions的用法,它允许我们定义各种模型是否按顺序执行:

ModelContext modelContext = ModelContext.Create(new ConfigFileConfigurationRepository(), new AppConfigConnectionStringRepository());
RestaurantDb newThaiRestaurant = new RestaurantDb();
newThaiRestaurant.Address = new RestaurantAddressDb()
{
	BuildingNr = "150",
	Coordinates = new double[] { 22.82, 99.12 },
	Street = "Old Street",
	ZipCode = 876654
};
newThaiRestaurant.Borough = "Somewhere in Thailand";
newThaiRestaurant.Cuisine = "Thai";
newThaiRestaurant.Grades = new List<RestaurantGradeDb>()
{
	new RestaurantGradeDb() {Grade = "A", InsertedUtc = DateTime.UtcNow, Score = "7" },
	new RestaurantGradeDb() {Grade = "B", InsertedUtc = DateTime.UtcNow, Score = "4" },
	new RestaurantGradeDb() {Grade = "B", InsertedUtc = DateTime.UtcNow, Score = "10" },
	new RestaurantGradeDb() {Grade = "B", InsertedUtc = DateTime.UtcNow, Score = "4" }
};
newThaiRestaurant.Id = 463456435;
newThaiRestaurant.Name = "FavThai";

RestaurantDb newThaiRestaurantTwo = new RestaurantDb();
newThaiRestaurantTwo.Address = new RestaurantAddressDb()
{
	BuildingNr = "13",
	Coordinates = new double[] { 22.82, 99.12 },
	Street = "Wide Street",
	ZipCode = 345456
};
newThaiRestaurantTwo.Borough = "Somewhere in Thailand";
newThaiRestaurantTwo.Cuisine = "Thai";
newThaiRestaurantTwo.Grades = new List<RestaurantGradeDb>()
{				
	new RestaurantGradeDb() {Grade = "A", InsertedUtc = DateTime.UtcNow, Score = "4" },
	new RestaurantGradeDb() {Grade = "B", InsertedUtc = DateTime.UtcNow, Score = "10" },
	new RestaurantGradeDb() {Grade = "C", InsertedUtc = DateTime.UtcNow, Score = "4" }
};
newThaiRestaurantTwo.Id = 463456436;
newThaiRestaurantTwo.Name = "ThaiDinner";

var updateDefinitionBorough = Builders<RestaurantDb>.Update.Set(r => r.Borough, "The middle of Thailand");

FilterDefinition<RestaurantDb> deletionFilterDefinition = Builders<RestaurantDb>.Filter.Eq(r => r.Name, "PakistaniKing");

BulkWriteResult bulkWriteResult = modelContext.Restaurants.BulkWrite(new WriteModel<RestaurantDb>[]
{
	new InsertOneModel<RestaurantDb>(newThaiRestaurant),
	new InsertOneModel<RestaurantDb>(newThaiRestaurantTwo),
	new UpdateOneModel<RestaurantDb>(Builders<RestaurantDb>.Filter.Eq(r => r.Name, "RandomThai"), updateDefinitionBorough),
	new DeleteOneModel<RestaurantDb>(deletionFilterDefinition)
}, new BulkWriteOptions() { IsOrdered = false });

Debug.WriteLine(string.Concat("Deleted count: ", bulkWriteResult.DeletedCount));
Debug.WriteLine(string.Concat("Inserted count: ", bulkWriteResult.InsertedCount));
Debug.WriteLine(string.Concat("Acknowledged: ", bulkWriteResult.IsAcknowledged));
Debug.WriteLine(string.Concat("Matched count: ", bulkWriteResult.MatchedCount));
Debug.WriteLine(string.Concat("Modified count: ", bulkWriteResult.ModifiedCount));
Debug.WriteLine(string.Concat("Request count: ", bulkWriteResult.RequestCount));
Debug.WriteLine(string.Concat("Upsert count: ", bulkWriteResult.Upserts));

BulkWriteResult是UpdateResult和DeleteResult的一种混合,并带有一些其他属性。 上述代码输出以下结果:

Deleted count: 1
Inserted count: 2
Acknowledged: true
Matched count: 1
Modified count: 1
Request count: 4
Upsert count: 0

我们现在已经覆盖了Mongo Shell和MongoDb .NET驱动程序中的经典CRUD案例。 现在是走向完全不同的查询的时候了:聚合。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/21.html