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<BsonDocument> DatabaseConn()
{
     // var client = new MongoClient("mongodb://$[username]:$[password]@$[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<BsonDocument> 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

<connectionStrings>
    <add name="mongodb" connectionString="mongodb://127.0.0.1:27017/test"/>
</connectionStrings>

 

连接的结果的如下:

77ac71895f393bf3fe83df0001d0fac9ad7.jpg

二、添加数据 

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

  1. 通过BsonDocument对象模型
  2. 通过自定义类型

例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<BsonDocument> 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<BsonDocument>,需要在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);
       
}

 

本文简单地介绍了C#操作mongodb的方法,对于mongodb的查询还有QueryDocument、Linq等,以及修改还有其他的方法,如Save(),删除Remove()等,并未涉及举例。虽然都能实现数据的操作,用户无感知,但是程序处理方式却不同,如文档更新的方法有Save()和Update()两种:其中Save()是整个文档替换,而Update()是文档的部分更新。

其它对文档操作的方法,可参考官网:https://docs.mongodb.com/manual/crud/

 

 

转载于:https://my.oschina.net/u/3578334/blog/1857999

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值