MongoDB从不懂到装懂其二(C#操作MongoDB)
上一篇文档讲述了在命令窗口下的MongoDB的相关操作,这一篇讲述C#语言环境下MongoDB的使用。
先附上实例代码:http://download.csdn.net/detail/sinat_22013331/9575331
注意在运行这个例子的时候,首先要按照例子中的数据库名称和表单名称来新建数据库和表单。同时开启数据库服务器。
具体使用时,先要下载MongoDB驱动文件,下载地址是:https://github.com/mongodb/mongo-csharp-driver/releases
驱动下载之后,在文件中添加引用就行了。下面详细讲解使用方法。
step 1:数据库基本设置,获取数据库和数据库服务器实例
这里可以新建一个类,专门用来放置数据库的一些设置细节。如下所示,每一条语句的作用都作了说明。
internal sealed class MongoDB { //数据库所在主机的端口 private readonly int MONGO_CONN_PORT = 27017; //设置连接超时15秒 private readonly int CONNECT_TIME_OUT = 15; //设置最大连接数 private readonly int MAXConnectionPoolSize = 99; //设置最小连接数 private readonly int MINConnectionPoolSize = 1; /// <summary> /// 获得数据库实例 /// </summary> /// <param name="MONGO_CONN_HOST">数据库主机链接</param> /// <param name="DB_Name">数据库名称</param> /// <returns>数据库实例</returns> public MongoDatabase GetDataBase(string MONGO_CONN_HOST, string DB_Name) { MongoClientSettings mongoSetting = new MongoClientSettings(); mongoSetting.ConnectTimeout = new TimeSpan(CONNECT_TIME_OUT * TimeSpan.TicksPerSecond); //设置超时连接 mongoSetting.Server = new MongoServerAddress(MONGO_CONN_HOST, MONGO_CONN_PORT); //设置数据库服务器 mongoSetting.MaxConnectionPoolSize = MAXConnectionPoolSize; //设置最大连接数 mongoSetting.MinConnectionPoolSize = MINConnectionPoolSize; //设置最小连接数 MongoClient client = new MongoClient(mongoSetting); //创建Mongo客户端 return client.GetServer().GetDatabase(DB_Name); //得到服务器端并生成数据库实例 } /// <summary> /// 得到数据库服务器 /// </summary> /// <param name="MONGO_CONN_HOST">数据库主机链接</param> /// <returns>数据库服务器实例</returns> public MongoServer GetDataBaseServer(string MONGO_CONN_HOST) { MongoClientSettings mongoSetting = new MongoClientSettings(); mongoSetting.ConnectTimeout = new TimeSpan(CONNECT_TIME_OUT * TimeSpan.TicksPerSecond); //设置超时连接 mongoSetting.Server = new MongoServerAddress(MONGO_CONN_HOST, MONGO_CONN_PORT); //设置数据库服务器 mongoSetting.MaxConnectionPoolSize = MAXConnectionPoolSize; //设置最大连接数 mongoSetting.MinConnectionPoolSize = MINConnectionPoolSize; //设置最小连接数 MongoClient client = new MongoClient(mongoSetting); //创建MongoDB客户端 return client.GetServer(); } }
step 2:创建一个MongoDBHelper文件,用于实例化数据库,同时进行增删改查的相关方法实现
首先是实例的创建,定义数据库实例和数据库服务器实例,在构造函数中完成创建
/// <summary> /// 数据库的实例 /// </summary> public MongoDatabase _db; /// <summary> /// 得到数据库服务器 /// </summary> private MongoServer _dbServer; /// <summary> /// ObjectId的键 /// </summary> private readonly string OBJECTID_KEY = "_id"; //初始化构造函数 public MongoDBHelper(string MONGO_CONN_HOST, string DB_Name) { this._db = new MongoDB().GetDataBase(MONGO_CONN_HOST, DB_Name); this._dbServer = new MongoDB().GetDataBaseServer(MONGO_CONN_HOST); }
接下来讨论增删改查方法的实现,首先是插入数据,插入数据分为单条插入和批量插入。批量插入的时候直接使用List类型。这里需要注意的是类型T。这个类型可以是基本数据类型,包括String,int,List,Dictionary,HashSet等,也可以是预定义的数据类型
/// <summary> /// 将数据插入进数据库 /// </summary> /// <typeparam name="T">需要插入数据库的实体类型</typeparam> /// <param name="t">需要插入数据库的具体实体</param> /// <param name="collectionName">指定插入的集合</param> public void Insert<T>(T t, string collectionName) { MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName); //将实体转换为bson文档 BsonDocument bd = t.ToBsonDocument(); //进行插入操作 WriteConcernResult result = mc.Insert(bd); if (!string.IsNullOrEmpty(result.ErrorMessage)) { throw new Exception(result.ErrorMessage); } } /// <summary> /// 批量插入数据 /// </summary> /// <typeparam name="T">需要插入数据库的实体类型</typeparam> /// <param name="list">需要插入数据的列表</param> /// <param name="collectionName">指定要插入的集合</param> public void Insert<T>(List<T> list, string collectionName) { MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName); //创建一个空间bson集合 List<BsonDocument> bsonList = new List<BsonDocument>(); //批量将数据转为bson格式 并且放进bson文档,lambda表达式 list.ForEach(t => bsonList.Add(t.ToBsonDocument())); //批量插入数据 mc.InsertBatch(bsonList); }
而删除数据的操作,可以分为按照查找条件删除和全部删除
/// <summary> /// 移除指定的数据 /// </summary> /// <typeparam name="T">移除的数据类型</typeparam> /// <param name="query">移除的数据条件</param> /// <param name="collectionName">指定的集合名词</param> public void Remove<T>(IMongoQuery query, string collectionName) { MongoCollection<T> mc = this._db.GetCollection<T>(collectionName); query = this.InitQuery(query); //根据指定查询移除数据 mc.Remove(query); } /// <summary> /// 移除实体里面所有的数据 /// </summary> /// <typeparam name="T">移除的数据类型</typeparam> /// <param name="collectionName">指定的集合名称</param> public void RemoveAll<T>(string collectionName) { this.Remove<T>(null, collectionName); }
查找数据的操作比较多一些,因为在读库的时候也比较常用。这里给出几个方法,分别是:查找数据库中所有记录,按条件查找多个记录,按条件查找一个记录(第一个找到的) 以及查找指定字段的记录
/// <summary> /// 查询一个集合中的所有数据 /// </summary> /// <typeparam name="T">该集合数据的所属类型</typeparam> /// <param name="collectionName">指定集合的名称</param> /// <returns>返回一个List列表</returns> public List<T> FindAll<T>(string collectionName) { MongoCollection<T> mc = this._db.GetCollection<T>(collectionName); //以实体方式取出其数据集合 MongoCursor<T> mongoCursor = mc.FindAll(); //直接转化为List返回 return mongoCursor.ToList<T>(); } /// <summary> /// 查询指定字段的所有数据 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <param name="collectionName">数据表名称</param> /// <param name="fd">字段区间定义</param> /// <returns></returns> public List<T> FindAll<T>(string collectionName, FieldsDocument fd) { MongoCollection<T> mc = this._db.GetCollection<T>(collectionName); //以实体方式取出其数据集合 MongoCursor<T> mongoCursor = mc.FindAll().SetFields(fd); //直接转化为List返回 return mongoCursor.ToList<T>(); } /// <summary> /// 查询一条记录 /// </summary> /// <typeparam name="T">该数据所属的类型</typeparam> /// <param name="query">查询的条件 可以为空</param> /// <param name="collectionName">去指定查询的集合</param> /// <returns>返回一个实体类型</returns> public T FindOne<T>(IMongoQuery query, string collectionName) { MongoCollection<T> mc = this._db.GetCollection<T>(collectionName); query = this.InitQuery(query); T t = mc.FindOne(query); return t; } /// <summary> /// 根据指定条件查询集合中的多条数据记录 /// </summary> /// <typeparam name="T">该集合数据的所属类型</typeparam> /// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param> /// <param name="collectionName">指定的集合的名称</param> /// <returns>返回一个List列表</returns> public List<T> Find<T>(IMongoQuery query, string collectionName) { MongoCollection<T> mc = this._db.GetCollection<T>(collectionName); query = this.InitQuery(query); MongoCursor<T> mongoCursor = mc.Find(query); return mongoCursor.ToList<T>(); }
最后,来说一下更新数据的操作,更新比较简单,这里给出一种更新方法
/// <summary> /// 更新数据 /// </summary> /// <typeparam name="T">更新的数据 所属的类型</typeparam> /// <param name="query">更新数据的查询</param> /// <param name="update">需要更新的文档</param> /// <param name="collectionName">指定更新集合的名称</param> public void Update<T>(IMongoQuery query, BsonDocument bd, string collectionName) { MongoCollection<T> mc = this._db.GetCollection<T>(collectionName); query = this.InitQuery(query); mc.Update(query, new UpdateDocument(bd)); }
当然,还有一些其他的方法,比如说获取数据库集合大小,增加数据库索引等操作,详见上面贴出来的例子里的代码吧。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C#实现Mongodb开发
- 下一篇: 在C#中使用官方驱动操作MongoDB