8天学通MongoDB——第八天 驱动实践

释放双眼,带上耳机,听听看~!

8天学通MongoDB——第一天 基础入门

8天学通MongoDB——第二天 细说增删查改

8天学通MongoDB——第三天 细说高级操作

8天学通MongoDB——第四天 索引操作

8天学通MongoDB——第五天 主从复制

8天学通MongoDB——第六天 分片技术

8天学通MongoDB——第七天 运维技术

8天学通MongoDB——第八天 驱动实践

转载来自:https://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html

 

     作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者,

因为提供了丰富的linq操作,相当方便。

官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。下载后,还提供了一个酷似msdn的帮助文档。

samus驱动:https://github.com/samus/mongodb-csharp/downloads。 

下面就具体看看samus驱动,https://github.com/samus/mongodb-csharp/blob/master/examples/Simple/Main.cs上面提供了

一个简单的demo,大体上看看我们就知道怎么玩了。

一: 实践

1:我们建立一个Person实体,MongoAlias特性表示取别名,这里的ID值将会覆盖掉数据库自动生成的_id。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1#region 数据实体
2/// <summary>
3/// 数据实体
4/// </summary>
5public class Person
6{
7        [MongoAlias("_id")]
8        public string ID { get; set; }
9        public string Name { get; set; }
10        public int Age { get; set; }
11        public DateTime CreateTime { get; set; }
12}
13#endregion
14

2:初始化一些变量


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1string connectionString = string.Empty;
2string databaseName = string.Empty;
3string collectionName = string.Empty;
4static MongodbHelper<T> mongodb;
5
6#region 初始化操作
7/// <summary>
8/// 初始化操作
9/// </summary>
10public MongodbHelper()
11{
12      connectionString = "Server=127.0.0.1:2222";
13      databaseName = "shopex";
14      collectionName = "person";
15}
16#endregion
17

3:为了方便T的继承类使用linq功能,我们还需要映射一下。


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
1#region 实现linq查询的映射配置
2/// <summary>
3/// 实现linq查询的映射配置
4/// </summary>
5public MongoConfiguration configuration
6{
7            get
8            {
9                var config = new MongoConfigurationBuilder();
10                config.Mapping(mapping =>
11                {
12                    mapping.DefaultProfile(profile =>
13                    {
14                        profile.SubClassesAre(t => t.IsSubclassOf(typeof(T)));
15                    });
16                    mapping.Map<T>();
17                    mapping.Map<T>();
18                });
19
20                config.ConnectionString(connectionString);
21                return config.BuildConfiguration();
22            }
23}
24#endregion
25

4:下面是一些基本的CURD的代码,跟写EF代码很类似,写起来好舒服。


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
1#region 插入操作
2/// <summary>
3/// 插入操作
4/// </summary>
5/// <param name="person"></param>
6/// <returns></returns>
7public void Insert(T t)
8{
9            using (Mongo mongo = new Mongo(configuration))
10            {
11                try
12                {
13                    mongo.Connect();
14                    var db = mongo.GetDatabase(databaseName);
15                    var collection = db.GetCollection<T>(collectionName);
16                    collection.Insert(t, true);
17                    mongo.Disconnect();
18
19                }
20                catch (Exception)
21                {
22                    mongo.Disconnect();
23                    throw;
24                }
25            }
26}
27#endregion
28
29#region 更新操作
30/// <summary>
31/// 更新操作
32/// </summary>
33/// <param name="person"></param>
34/// <returns></returns>
35public void Update(T t, Expression<Func<T, bool>> func)
36{
37            using (Mongo mongo = new Mongo(configuration))
38            {
39                try
40                {
41                    mongo.Connect();
42                    var db = mongo.GetDatabase(databaseName);
43                    var collection = db.GetCollection<T>(collectionName);
44                    collection.Update<T>(t, func, true);
45                    mongo.Disconnect();
46
47                }
48                catch (Exception)
49                {
50                    mongo.Disconnect();
51                    throw;
52                }
53            }
54}
55#endregion
56
57#region 获取集合
58/// <summary>
59///获取集合
60/// </summary>
61/// <param name="person"></param>
62/// <returns></returns>
63public List<T> List(int pageIndex, int pageSize, Expression<Func<T, bool>> func, out int pageCount)
64{
65            pageCount = 0;
66
67            using (Mongo mongo = new Mongo(configuration))
68            {
69                try
70                {
71                    mongo.Connect();
72                    var db = mongo.GetDatabase(databaseName);
73                    var collection = db.GetCollection<T>(collectionName);
74                    pageCount = Convert.ToInt32(collection.Count());
75                    var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex - 1))
76                                                   .Take(pageSize).Select(i => i).ToList();
77
78                    mongo.Disconnect();
79                    return personList;
80
81                }
82                catch (Exception)
83                {
84                    mongo.Disconnect();
85                    throw;
86                }
87            }
88}
89#endregion
90
91#region 读取单条记录
92/// <summary>
93///读取单条记录
94/// </summary>
95/// <param name="person"></param>
96/// <returns></returns>
97public T Single(Expression<Func<T, bool>> func)
98{
99            using (Mongo mongo = new Mongo(configuration))
100            {
101                try
102                {
103                    mongo.Connect();
104                    var db = mongo.GetDatabase(databaseName);
105                    var collection = db.GetCollection<T>(collectionName);
106                    var single = collection.Linq().FirstOrDefault(func);
107                    mongo.Disconnect();
108                    return single;
109
110                }
111                catch (Exception)
112                {
113                    mongo.Disconnect();
114                    throw;
115                }
116            }
117}
118#endregion
119
120#region 删除操作
121/// <summary>
122/// 删除操作
123/// </summary>
124/// <param name="person"></param>
125/// <returns></returns>
126public void Delete(Expression<Func<T, bool>> func)
127{
128            using (Mongo mongo = new Mongo(configuration))
129            {
130                try
131                {
132                    mongo.Connect();
133                    var db = mongo.GetDatabase(databaseName);
134                    var collection = db.GetCollection<T>(collectionName);
135                    //这个地方要注意,一定要加上T参数,否则会当作object类型处理
136//导致删除失败
137                    collection.Remove<T>(func);
138                    mongo.Disconnect();
139
140                }
141                catch (Exception)
142                {
143                    mongo.Disconnect();
144                    throw;
145                }
146            }
147}
148#endregion
149
  1.   好,我们开一下2222端口,由于前前篇我已经把这个mongodb做成了服务,现在就直接连过去了,并做一下对Name的索引。

8天学通MongoDB——第八天 驱动实践

  1. 一切准备妥当,我们做下基本的操作,比如这里我添加一千条数据,注意我开启的是安全模式,如果插入不成功,将会抛出异常。

 <1> Add:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1static void Main(string[] args)
2{
3          MongodbHelper&lt;Person&gt; helper = new MongodbHelper&lt;Person&gt;();
4
5          //插入1000条数据
6          for (int i = 0; i &lt; 1000; i++)
7          {
8               helper.Insert(new Person()
9               {
10                    ID = Guid.NewGuid().ToString(),
11                    Name = &quot;jack&quot; + i,
12                    Age = i,
13                    CreateTime = DateTime.Now
14               });
15          }
16
17          Console.WriteLine(&quot;插入成功&quot;);
18          Console.Read();
19}
20

8天学通MongoDB——第八天 驱动实践

乍一看显示的数据以为有问题,为什么没有出现jack0或者jack999,不过find的一下后心情舒坦了。

<2> update:   这里就把jack941的名字改掉“mary”


1
2
3
4
5
6
7
8
9
10
11
12
13
1static void Main(string[] args)
2{
3            MongodbHelper&lt;Person&gt; helper = new MongodbHelper&lt;Person&gt;();
4
5            //修改jack941改成mary
6            var single = helper.Single(i =&gt; i.Name == &quot;jack941&quot;);
7            single.Name = &quot;mary&quot;;
8            helper.Update(single, i =&gt; i.ID == single.ID);
9
10            Console.WriteLine(&quot;修改成功&quot;);
11            Console.Read();
12}
13

8天学通MongoDB——第八天 驱动实践

<3>Delete:  删除mary这条记录


1
2
3
4
5
6
7
8
9
10
11
1static void Main(string[] args)
2{
3       MongodbHelper&lt;Person&gt; helper = new MongodbHelper&lt;Person&gt;();
4
5       //删除mary这个记录
6       helper.Delete(i =&gt; i.Name == &quot;mary&quot;);
7
8       Console.WriteLine(&quot;删除成功&quot;);
9       Console.Read();
10}
11

8天学通MongoDB——第八天 驱动实践

<4> list操作: 这里我获取一下名字里面带9的人数列表


1
2
3
4
5
6
7
8
9
1static void Main(string[] args)
2 {
3       MongodbHelper&lt;Person&gt; helper = new MongodbHelper&lt;Person&gt;();
4       int pagecount;
5       //获取名字里面带9的人数
6       var list = helper.List(1, 20, i =&gt; i.Name.Contains(&quot;9&quot;), out pagecount);
7       Console.Read();
8 }
9

 

8天学通MongoDB——第八天 驱动实践

总的运行代码


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
221
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Configuration;
6using System.Linq.Expressions;
7using MongoDB.Configuration;
8using MongoDB.Linq;
9using MongoDB.Attributes;
10
11namespace MongoDB.Test
12{
13    public class MongodbHelper&lt;T&gt; where T : class
14    {
15        string connectionString = string.Empty;
16        string databaseName = string.Empty;
17        string collectionName = string.Empty;
18        static MongodbHelper&lt;T&gt; mongodb;
19
20        #region 初始化操作
21        /// &lt;summary&gt;
22/// 初始化操作
23/// &lt;/summary&gt;
24        public MongodbHelper()
25        {
26            connectionString = &quot;Server=127.0.0.1:2222&quot;;
27            databaseName = &quot;shopex&quot;;
28            collectionName = &quot;person&quot;;
29        }
30        #endregion
31
32        #region 实现linq查询的映射配置
33        /// &lt;summary&gt;
34/// 实现linq查询的映射配置
35/// &lt;/summary&gt;
36        public MongoConfiguration configuration
37        {
38            get
39            {
40                var config = new MongoConfigurationBuilder();
41                config.Mapping(mapping =&gt;
42                {
43                    mapping.DefaultProfile(profile =&gt;
44                    {
45                        profile.SubClassesAre(t =&gt; t.IsSubclassOf(typeof(T)));
46                    });
47                    mapping.Map&lt;T&gt;();
48                    mapping.Map&lt;T&gt;();
49                });
50
51                config.ConnectionString(connectionString);
52                return config.BuildConfiguration();
53            }
54        }
55        #endregion
56
57        #region 插入操作
58        /// &lt;summary&gt;
59/// 插入操作
60/// &lt;/summary&gt;
61/// &lt;param name=&quot;person&quot;&gt;&lt;/param&gt;
62/// &lt;returns&gt;&lt;/returns&gt;
63        public void Insert(T t)
64        {
65            using (Mongo mongo = new Mongo(configuration))
66            {
67                try
68                {
69                    mongo.Connect();
70                    var db = mongo.GetDatabase(databaseName);
71                    var collection = db.GetCollection&lt;T&gt;(collectionName);
72                    collection.Insert(t, true);
73                    mongo.Disconnect();
74
75                }
76                catch (Exception)
77                {
78                    mongo.Disconnect();
79                    throw;
80                }
81            }
82        }
83        #endregion
84
85        #region 更新操作
86        /// &lt;summary&gt;
87/// 更新操作
88/// &lt;/summary&gt;
89/// &lt;param name=&quot;person&quot;&gt;&lt;/param&gt;
90/// &lt;returns&gt;&lt;/returns&gt;
91        public void Update(T t, Expression&lt;Func&lt;T, bool&gt;&gt; func)
92        {
93            using (Mongo mongo = new Mongo(configuration))
94            {
95                try
96                {
97                    mongo.Connect();
98                    var db = mongo.GetDatabase(databaseName);
99                    var collection = db.GetCollection&lt;T&gt;(collectionName);
100                    collection.Update&lt;T&gt;(t, func, true);
101                    mongo.Disconnect();
102
103                }
104                catch (Exception)
105                {
106                    mongo.Disconnect();
107                    throw;
108                }
109            }
110        }
111        #endregion
112
113        #region 获取集合
114        /// &lt;summary&gt;
115///获取集合
116/// &lt;/summary&gt;
117/// &lt;param name=&quot;person&quot;&gt;&lt;/param&gt;
118/// &lt;returns&gt;&lt;/returns&gt;
119        public List&lt;T&gt; List(int pageIndex, int pageSize, Expression&lt;Func&lt;T, bool&gt;&gt; func, out int pageCount)
120        {
121            pageCount = 0;
122
123            using (Mongo mongo = new Mongo(configuration))
124            {
125                try
126                {
127                    mongo.Connect();
128                    var db = mongo.GetDatabase(databaseName);
129                    var collection = db.GetCollection&lt;T&gt;(collectionName);
130                    pageCount = Convert.ToInt32(collection.Count());
131                    var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex - 1))
132                                                   .Take(pageSize).Select(i =&gt; i).ToList();
133
134                    mongo.Disconnect();
135                    return personList;
136
137                }
138                catch (Exception)
139                {
140                    mongo.Disconnect();
141                    throw;
142                }
143            }
144        }
145        #endregion
146
147        #region 读取单条记录
148        /// &lt;summary&gt;
149///读取单条记录
150/// &lt;/summary&gt;
151/// &lt;param name=&quot;person&quot;&gt;&lt;/param&gt;
152/// &lt;returns&gt;&lt;/returns&gt;
153        public T Single(Expression&lt;Func&lt;T, bool&gt;&gt; func)
154        {
155            using (Mongo mongo = new Mongo(configuration))
156            {
157                try
158                {
159                    mongo.Connect();
160                    var db = mongo.GetDatabase(databaseName);
161                    var collection = db.GetCollection&lt;T&gt;(collectionName);
162                    var single = collection.Linq().FirstOrDefault(func);
163                    mongo.Disconnect();
164                    return single;
165
166                }
167                catch (Exception)
168                {
169                    mongo.Disconnect();
170                    throw;
171                }
172            }
173        }
174        #endregion
175
176        #region 删除操作
177        /// &lt;summary&gt;
178/// 删除操作
179/// &lt;/summary&gt;
180/// &lt;param name=&quot;person&quot;&gt;&lt;/param&gt;
181/// &lt;returns&gt;&lt;/returns&gt;
182        public void Delete(Expression&lt;Func&lt;T, bool&gt;&gt; func)
183        {
184            using (Mongo mongo = new Mongo(configuration))
185            {
186                try
187                {
188                    mongo.Connect();
189                    var db = mongo.GetDatabase(databaseName);
190                    var collection = db.GetCollection&lt;T&gt;(collectionName);
191                    //这个地方要注意,一定要加上T参数,否则会当作object类型处理
192//导致删除失败
193                    collection.Remove&lt;T&gt;(func);
194                    mongo.Disconnect();
195
196                }
197                catch (Exception)
198                {
199                    mongo.Disconnect();
200                    throw;
201                }
202            }
203        }
204        #endregion
205    }
206
207    #region 数据实体
208    /// &lt;summary&gt;
209/// 数据实体
210/// &lt;/summary&gt;
211    public class Person
212    {
213        [MongoAlias(&quot;_id&quot;)]
214        public string ID { get; set; }
215        public string Name { get; set; }
216        public int Age { get; set; }
217        public DateTime CreateTime { get; set; }
218    }
219    #endregion
220}
221

wow,趁着3天的休假,不断的努力终于把这个系列写完了,很感谢一直关注此系列的朋友。8天学通MongoDB——第八天 驱动实践

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索