C#操作Mongodb

主要介绍如何使用C#程序连接MongoDB数据库,实现增删改查操作。

在使用C#驱动的时候,要在工程中添加"MongoDB.Bson.dll"和"MongoDB.Driver.dll"的引用

Install-Package MongoDB.Driver -Version 2.6.1

Install-Package MongoDB.Bson -Version 2.6.1

一、连接数据库

方式1:直接连接

参考官网:https://docs.mongodb.com/guides/server/read/index.html

private IMongoCollection DatabaseConn()
{
// var client = new MongoClient(“mongodb:// [ u s e r n a m e ] : [username]: [username]:[password]@ [ h o s t l i s t ] / [hostlist]/ [hostlist]/[database]?authSource=$[authSource]”);

 var client = new MongoClient("mongodb://localhost");
 var database = client.GetDatabase("test"); //数据库名称
 var collection = database.GetCollection<BsonDocument>("User");//连接的表名

 return collection;

}
方式2:配置文件要写连接的数据库

private IMongoCollection DatabaseConn()
{

 // 定义要查询的集合名称
 const string collectionName = "User";
 // 读取连接字符串
 string strCon = ConfigurationManager.ConnectionStrings["mongodb"].ConnectionString;
 var mongoUrl = new MongoUrlBuilder(strCon);
 // 获取数据库名称
 string databaseName = mongoUrl.DatabaseName;
 // 创建并实例化客户端
 IMongoClient _client = new MongoClient(mongoUrl.ToMongoUrl());
 // 根据数据库名称实例化数据库
 IMongoDatabase _database = _client.GetDatabase(databaseName);
 // 根据集合名称获取集合
 var collection = _database.GetCollection<BsonDocument>(collectionName);

 return collection;

}
web.config

连接的结果的如下:

二、添加数据

在MongoDB中,当用户对collection进行操作的时候可以有两种方式:

通过BsonDocument对象模型
通过自定义类型
例1:通过BsonDocument对象模型

public BsonDocument AddUser(int id, string name, int age)
{
var collection = DatabaseConn();//连接数据库,也就是上述的两种方法

 BsonDocument user = new BsonDocument();
 user.Add("UserId", id);
 user.Add("UserName", name);
 user.Add("Age", age);
 //user.Add("hobby", new BsonArray() { "swimming","reading"});//随意增加,因为BsonDocument灵活支持各种文档模式 
 collection.InsertOne(user);

 return user;//这边返回的类型BsonDocument

}
注:在MongoDB collection中,每个文档都可以看作一个Bson(Binary JSON)对象,所以在驱动中有个一个BsonDocument类型,可以通过上述的方式生成一个文档,并且通过Add方法添加键/值对。通过这种方式生成的BsonDocument对象可以直接插入collection中。


例2:通过自定义类型

public class User
{
public ObjectId _id;//BsonType.ObjectId 这个对应了 MongoDB.Bson.ObjectId   
public int UserId { get; set; }//不可以取名为Id,因为已经被占用
public string UserName { get; set; }
public int Age { set; get; }
}
注:用自定义类型的时候一定要有Id字段,但不可取名为Id

public User AddUser(int id, string name, int age)
{
var collection = DatabaseConn();//连接数据库,也就是上述的两种方法

 User user = new User();
 user.UserId = id;
 user.UserName = name;
 user.Age = age;
 collection.InsertOne(user.ToBsonDocument());

 return user;//这边的返回类型User实体

}

上面两种方式都可以使用,而且各有好处,通过自定义类型的方式,可以使得collection中的文档有比较统一的模式;使用BsonDocument方式则可以支持更多的文档模式,也就是说如果一个collection中的文档拥有各种各样的模式,那么BsonDocument方式就会更灵活,就像上述的事例中hobby字段,不建议这么做,因为这样会对文档查询带来麻烦。

三、查询数据

Query Builder是一种更简洁的方式,当通过这种方式查询的时候,我们需要使用driver中的builder来生成query

public List QueryUser(string uname)
{
var collection = DatabaseConn();

     //var filter = Builders<BsonDocument>.Filter.Eq("UserName", uname);//完全匹配
     var filter = Builders<BsonDocument>.Filter.Regex("UserName", new BsonRegularExpression(uname));//模糊查询
     var query = collection.Find(filter).ToList();//query这边的返回类型是List<BsonDocument>


     #region //List<BsonDocument>转List<User>
     //var result = new List<User>();
     //foreach (var m in query)
     //{
     //    var bsElements = m.Elements.ToList();
     //    var bsDocs = new BsonDocument();
     //    for (int i = 1; i < bsElements.Count(); i++)
     //    {
     //        bsDocs.SetElement(bsElements[i]);
     //    }
     //    string json = bsDocs.ToJson();
     //    var user = JsonHelper.ParseFormJson<User>(json);
     //    result.Add(user);
     //}
     #endregion

     return query;//若执行转化,返回的类型就会变化

}
注:返回的类型若是List,需要在WebApiConfig加

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
目的是把XmlFormatter序列化方式去掉。因为火狐和Chrome显示的是xml,只有Ie才会得到json数据

(参考:https://www.cnblogs.com/uglyman/p/6890706.html?utm_source=itdadao&utm_medium=referral)

四、修改数据

public BsonDocument EditUser(int id, string name, int age)
{
var collection = DatabaseConn();//连接数据库,也就是上述的两种方法

   // 1.Update
   var filter = Builders<BsonDocument>.Filter.Eq("UserId", id);
   var update = Builders<BsonDocument>.Update.Set("UserName", name).Set("Age", age);//这边返回的类型MongoDB.Driver.UpdateDefinition<BsonDocument>
   collection.UpdateOne(filter, update);


   // 2.Query
   var query = Builders<BsonDocument>.Filter.Eq("UserId", id);
   var model = collection.Find(query).FirstOrDefault();
   return model;

}

五、删除数据

public void DeleteUser(int id)
{
var collection = DatabaseConn();//连接数据库,也就是上述的两种方法

 var filter = Builders<BsonDocument>.Filter.Eq("UserId", id);
 collection.DeleteOne(filter);

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中使用MongoDB的示例代码有几个部分。首先,你需要引用MongoDB的命名空间,例如"using MongoDB.Driver;"。然后,你需要建立一个MongoDB的客户端和数据库连接。你可以使用连接字符串来指定连接参数,如服务器地址和数据库名称。连接字符串可以通过配置文件读取,也可以直接在代码中指定。接下来,你需要指定要操作的集合名称,获取该集合的引用。你可以使用查询条件来过滤集合中的文档,并使用Find方法获取满足条件的文档列表。最后,你可以遍历文档列表,并输出文档中的字段值。在示例代码中,输出的姓名和电话字段分别通过p["name"]和p["phone"]来获取。示例代码中还展示了一种插入文档的方法,使用InsertOneAsync方法将一个文档插入到集合中。关于连接方式的不同,你可以选择使用连接字符串来建立连接,也可以直接指定服务器地址和数据库名称。但无论使用哪种方式,你都需要确保连接参数的正确性和有效性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [1.C#操作MongoDB](https://blog.csdn.net/qq_34035956/article/details/125716599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [在C#中使用MongoDB](https://blog.csdn.net/u011301348/article/details/89330590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值