猿教程 Logo

.Net连接MongoDb:使用MongoDb驱动插入数据

介绍

在上一篇文章中,我们研究了与精简我们的搜索有关的4个功能:限制,跳过,排序和计数。 我们看到他们使用起来很简单直接。 排序函数是最通用的,因为有多种方法来构建我们的查询的排序定义。

在这篇文章中,我们将介绍如何通过MongoDb驱动程序插入文档。

插入

插入由驱动程序中的以下函数表示:InsertOne,InsertMany,InsertOneAsync和InsertManyAsync。 你可以猜测它们是什么。 InsertOne同步插入单个文档,而InsertOneAsync以等待方式执行相同操作。 InsertMany和InsertManyAsync用于批量插入以同时插入许多文档。

我们来试试添加一个新的餐厅文件:

ModelContext modelContext = ModelContext.Create(new ConfigFileConfigurationRepository(), new AppConfigConnectionStringRepository());
RestaurantDb newRestaurant = new RestaurantDb();
newRestaurant.Address = new RestaurantAddressDb()
{
	BuildingNr = "120",
	Coordinates = new double[] {22.82, 99.12},
	Street = "Whatever",
	ZipCode = 123456
};
newRestaurant.Borough = "Somewhere in Thailand";
newRestaurant.Cuisine = "Thai";
newRestaurant.Grades = new List<RestaurantGradeDb>()
{
	new RestaurantGradeDb() {Grade = "A", InsertedUtc = DateTime.UtcNow, Score = "7" },
	new RestaurantGradeDb() {Grade = "B", InsertedUtc = DateTime.UtcNow, Score = "4" }
};
newRestaurant.Id = 883738291;
newRestaurant.Name = "RandomThai";
						
modelContext.Restaurants.InsertOne(newRestaurant);

我们构造一个新的RestaurantDb对象,然后打扮一下。 然后我们调用InsertOne函数。 请注意,我们不需要在代码中提供ObjectId,它将由MongoDb为我们生成。

如果您想在代码中提供一个新的Objectid,您可以按如下方式进行操作:

newRestaurant.MongoDbId = ObjectId.GenerateNewId();

MongoDb客户端shell中的简单查询与...

db.restaurants.find({"name" : "RandomThai"}).pretty()

...会立即找到我们的泰国餐厅:

{
        "_id" : ObjectId("571fc46690f5280e2c17d775"),
        "address" : {
                "building" : "120",
                "coord" : [
                        22.82,
                        99.12
                ],
                "street" : "Whatever",
                "zipcode" : 123456
        },
        "borough" : "Somewhere in Thailand",
        "cuisine" : "Thai",
        "grades" : [
                {
                        "date" : ISODate("2016-04-26T19:41:23.904Z"),
                        "grade" : "A",
                        "score" : "7"
                },
                {
                        "date" : ISODate("2016-04-26T19:41:23.904Z"),
                        "grade" : "B",
                        "score" : "4"
                }
        ],
        "name" : "RandomThai",
        "restaurant_id" : 883738291
}

只是FYI:我从这个网站得到这些坐标生成随机的地理坐标。 任何大陆的第一个地点都在泰国,所以我选择了这个演示。

我们还将插入演示InsertMany在同一请求中插入2个餐厅的用法:

RestaurantDb newPakistaniRestaurant = new RestaurantDb();
newPakistaniRestaurant.Address = new RestaurantAddressDb()
{
	BuildingNr = "12A",
	Coordinates = new double[] { 31.135, 71.24 },
	Street = "New Street",
	ZipCode = 9877654
};
newPakistaniRestaurant.Borough = "Somewhere in Pakistan";
newPakistaniRestaurant.Cuisine = "Pakistani";
newPakistaniRestaurant.Grades = new List<RestaurantGradeDb>()
{
	new RestaurantGradeDb() {Grade = "A", InsertedUtc = DateTime.UtcNow, Score = "9" },
	new RestaurantGradeDb() {Grade = "C", InsertedUtc = DateTime.UtcNow, Score = "3" }
};
newPakistaniRestaurant.Id = 457656745;
newPakistaniRestaurant.Name = "PakistaniKing";

RestaurantDb newMexicanRestaurant = new RestaurantDb();
newMexicanRestaurant.Address = new RestaurantAddressDb()
{
	BuildingNr = "2/C",
	Coordinates = new double[] { 24.68, -100.9 },
	Street = "Mexico Street",
	ZipCode = 768324523
};
newMexicanRestaurant.Borough = "Somewhere in Mexico";
newMexicanRestaurant.Cuisine = "Mexican";
newMexicanRestaurant.Grades = new List<RestaurantGradeDb>()
{
	new RestaurantGradeDb() {Grade = "B", InsertedUtc = DateTime.UtcNow, Score = "10" }
};
newMexicanRestaurant.Id = 457656745;
newMexicanRestaurant.Name = "MexicanKing";

List<RestaurantDb> newRestaurants = new List<RestaurantDb>()
{
	newPakistaniRestaurant,
	newMexicanRestaurant
};

modelContext.Restaurants.InsertMany(newRestaurants);

Mongo shell中的一个简单的JSON查询...:

db.restaurants.find({$or : [{"name" : "PakistaniKing"}, {"name" : "MexicanKing"}]}).pretty()

...会发现他们两个:

{
        "_id" : ObjectId("571fc8d290f5282a5077895f"),
        "address" : {
                "building" : "12A",
                "coord" : [
                        31.135,
                        71.24
                ],
                "street" : "New Street",
                "zipcode" : 9877654
        },
        "borough" : "Somewhere in Pakistan",
        "cuisine" : "Pakistani",
        "grades" : [
                {
                        "date" : ISODate("2016-04-26T20:00:18.083Z"),
                        "grade" : "A",
                        "score" : "9"
                },
                {
                        "date" : ISODate("2016-04-26T20:00:18.083Z"),
                        "grade" : "C",
                        "score" : "3"
                }
        ],
        "name" : "PakistaniKing",
        "restaurant_id" : 457656745
}
{
        "_id" : ObjectId("571fc8d290f5282a50778960"),
        "address" : {
                "building" : "2/C",
                "coord" : [
                        24.68,
                        -100.9
                ],
                "street" : "Mexico Street",
                "zipcode" : 768324523
        },
        "borough" : "Somewhere in Mexico",
        "cuisine" : "Mexican",
        "grades" : [
                {
                        "date" : ISODate("2016-04-26T20:00:18.083Z"),
                        "grade" : "B",
                        "score" : "10"
                }
        ],
        "name" : "MexicanKing",
        "restaurant_id" : 457656745
}

就插入而言,这是非常多的。 关于插入的另一个重要主题称为写入关注,但是稍后将分别进行讨论。

在下一篇文章中,我们将介绍更新。


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