MongoDB 学习笔记(四)C# 操作MongoDB
C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者,
因为提供了丰富的linq操作,相当方便。
官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。下载后,还提供了一个酷似msdn的帮助文档。
samus驱动:https://github.com/samus/mongodb-csharp/downloads。
封装的 MongoDBHepler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | public class MongoDBHepler<T> where T: class {<br><strong> //数据库连接字符串区分大小写</strong> public static string connectionString =ConfigurationManager.AppSettings[ "mongodbconn" ].ToString(); public static string databaseName = ConfigurationManager.AppSettings[ "mongodbName" ].ToString(); #region 初始化操作 /// <summary> /// /// </summary> /// <param name="strdatabaseName"></param> /// <param name="strcollectionName"></param> public MongoDBHepler() { } #endregion #region 实现linq查询的映射配置 /// <summary> /// 实现linq查询的映射配置 /// </summary> public MongoConfiguration configuration { get { var config = new MongoConfigurationBuilder(); config.Mapping(mapping => { mapping.DefaultProfile(profile => { profile.SubClassesAre(t => t.IsSubclassOf( typeof (T))); }); mapping.Map<T>(); mapping.Map<T>(); }); config.ConnectionString(connectionString); return config.BuildConfiguration(); } } #endregion #region 插入操作 /// <summary> /// 插入操作 /// </summary> /// <returns></returns> public void Insert(T t) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); collection.Insert(t, true ); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw ; } } } public void Insert(List<T> list) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); collection.Insert(list, true ); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw ; } } } #endregion #region 更新操作 /// <summary> /// 更新操作 /// </summary> /// <returns></returns> public void Update(T t,Expression<Func<T, bool >> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); collection.Update<T>(t, func, true ); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw ; } } } #endregion #region 获取集合 /// <summary> ///获取集合 /// </summary> /// <returns></returns> public List<T> List( int pageIndex, int pageSize, Expression<Func<T, bool >> func, out int pageCount) { pageCount = 0; using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); pageCount = Convert.ToInt32(collection.Count()); var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex - 1)) .Take(pageSize).Select(i => i).ToList(); mongo.Disconnect(); return personList; } catch (Exception) { mongo.Disconnect(); throw ; } } } public List<T> List(Expression<Func<T, bool >> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); var personList = collection.Linq().Where(func).Select(i => i).ToList(); mongo.Disconnect(); return personList; } catch (Exception) { mongo.Disconnect(); throw ; } } } #endregion #region 读取单条记录 /// <summary> ///读取单条记录 /// </summary> /// <returns></returns> public T Single(Expression<Func<T, bool >> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); var single = collection.Linq().FirstOrDefault(func); mongo.Disconnect(); return single; } catch (Exception) { mongo.Disconnect(); throw ; } } } #endregion #region 删除操作 /// <summary> /// 删除操作 /// </summary> /// <returns></returns> public void Delete(Expression<Func<T, bool >> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(); //这个地方要注意,一定要加上T参数,否则会当作object类型处理 //导致删除失败 collection.Remove<T>(func); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw ; } } } #endregion } |
使用:
一: 实践
1:我们建立一个Person实体,MongoAlias特性表示取别名,这里的ID值将会覆盖掉数据库自动生成的_id。
1 #region 数据实体
2 /// <summary>
3 /// 数据实体
4 /// </summary>
5 public class Person
6 {
7 [MongoAlias("_id")]
8 public string ID { get; set; }
9
10 public string Name { get; set; }
11
12 public int Age { get; set; }
13
14 public DateTime CreateTime { get; set; }
15 }
16 #endregion
<1> Add:
1 static void Main(string[] args)
2 {
3 MongodbHelper<Person> helper = new MongodbHelper<Person>();
4
5 //插入1000条数据
6 for (int i = 0; i < 1000; i++)
7 {
8 helper.Insert(new Person()
9 {
10 ID = Guid.NewGuid().ToString(),
11 Name = "jack" + i,
12 Age = i,
13 CreateTime = DateTime.Now
14 });
15 }
16
17 Console.WriteLine("插入成功");
18
19 Console.Read();
20 }
乍一看显示的数据以为有问题,为什么没有出现jack0或者jack999,不过find的一下后心情舒坦了。
<2> update: 这里就把jack941的名字改掉“mary”
1 static void Main(string[] args)
2 {
3 MongodbHelper<Person> helper = new MongodbHelper<Person>();
4
5 //修改jack941改成mary
6 var single = helper.Single(i => i.Name == "jack941");
7 single.Name = "mary";
8 helper.Update(single, i => i.ID == single.ID);
9
10 Console.WriteLine("修改成功");
11 Console.Read();
12 }
<3>Delete: 删除mary这条记录
1 static void Main(string[] args)
2 {
3 MongodbHelper<Person> helper = new MongodbHelper<Person>();
4
5 //删除mary这个记录
6 helper.Delete(i => i.Name == "mary");
7
8 Console.WriteLine("删除成功");
9 Console.Read();
10 }
<4> list操作: 这里我获取一下名字里面带9的人数列表
1 static void Main(string[] args)
2 {
3 MongodbHelper<Person> helper = new MongodbHelper<Person>();
4
5 int pagecount;
6
7 //获取名字里面带9的人数
8 var list = helper.List(1, 20, i => i.Name.Contains("9"), out pagecount);
9
10 Console.Read();
11 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步