• mongodb 查询添加修改命令范例
  • 超级玛丽 发表于 2015/5/12 11:40:00 | 分类标签: mongodb 非关系型数据库 修改
  • 一: 实践

    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

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

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

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

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

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

    5.   好,我们开一下2222端口,由于前前篇我已经把这个mongodb做成了服务,现在就直接连过去了,并做一下对Name的索引。

     

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

     <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 }
     

     

    总的运行代码

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

     

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:超级玛丽
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮