• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB入门教程之C#驱动操作实例

    作为系列的最后一篇,得要说说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。

    复制代码 代码如下:

    #region 数据实体
        /// summary>
    /// 数据实体
    /// /summary>
        public class Person
        {
            [MongoAlias("_id")]
            public string ID { get; set; }

            public string Name { get; set; }

            public int Age { get; set; }

            public DateTime CreateTime { get; set; }
        }
        #endregion

    2:初始化一些变量

    复制代码 代码如下:

    string connectionString = string.Empty;

            string databaseName = string.Empty;

            string collectionName = string.Empty;

            static MongodbHelperT> mongodb;

            #region 初始化操作
    /// summary>
    /// 初始化操作
    /// /summary>
            public MongodbHelper()
            {
                connectionString = "Server=127.0.0.1:2222";
                databaseName = "shopex";
                collectionName = "person";
            }
            #endregion

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

    复制代码 代码如下:

    #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.MapT>();
                        mapping.MapT>();
                    });

                    config.ConnectionString(connectionString);

                    return config.BuildConfiguration();
                }
            }
            #endregion

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

    复制代码 代码如下:

    #region 插入操作
            /// summary>
    /// 插入操作
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public void Insert(T t)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        collection.Insert(t, true);

                        mongo.Disconnect();

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

            #region 更新操作
            /// summary>
    /// 更新操作
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public void Update(T t, ExpressionFuncT, bool>> func)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        collection.UpdateT>(t, func, true);

                        mongo.Disconnect();

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

            #region 获取集合
            /// summary>
    ///获取集合
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public ListT> List(int pageIndex, int pageSize, ExpressionFuncT, bool>> func, out int pageCount)
            {
                pageCount = 0;

                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        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;
                    }
                }
            }
            #endregion

            #region 读取单条记录
            /// summary>
    ///读取单条记录
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public T Single(ExpressionFuncT, bool>> func)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        var single = collection.Linq().FirstOrDefault(func);

                        mongo.Disconnect();

                        return single;

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

            #region 删除操作
            /// summary>
    /// 删除操作
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public void Delete(ExpressionFuncT, bool>> func)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        //这个地方要注意,一定要加上T参数,否则会当作object类型处理
    //导致删除失败
                        collection.RemoveT>(func);

                        mongo.Disconnect();

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

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

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

     1> Add:

     

    复制代码 代码如下:

     static void Main(string[] args)
            {
                MongodbHelperPerson> helper = new MongodbHelperPerson>();

                //插入1000条数据
                for (int i = 0; i 1000; i++)
                {
                    helper.Insert(new Person()
                    {
                        ID = Guid.NewGuid().ToString(),
                        Name = "jack" + i,
                        Age = i,
                        CreateTime = DateTime.Now
                    });
                }

                Console.WriteLine("插入成功");

                Console.Read();
            }
     


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

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

    复制代码 代码如下:

    static void Main(string[] args)
            {
                MongodbHelperPerson> helper = new MongodbHelperPerson>();

                //修改jack941改成mary
                var single = helper.Single(i => i.Name == "jack941");
                single.Name = "mary";
                helper.Update(single, i => i.ID == single.ID);

                Console.WriteLine("修改成功");
                Console.Read();
            }

    3>Delete:  删除mary这条记录

    复制代码 代码如下:

    static void Main(string[] args)
            {
                MongodbHelperPerson> helper = new MongodbHelperPerson>();

                //删除mary这个记录
                helper.Delete(i => i.Name == "mary");

                Console.WriteLine("删除成功");
                Console.Read();
            }

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

    复制代码 代码如下:

    static void Main(string[] args)
            {
                MongodbHelperPerson> helper = new MongodbHelperPerson>();

                int pagecount;

                //获取名字里面带9的人数
                var list = helper.List(1, 20, i => i.Name.Contains("9"), out pagecount);

               Console.Read();
            }

    总的运行代码

    复制代码 代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    using System.Linq.Expressions;

    using MongoDB.Configuration;
    using MongoDB.Linq;
    using MongoDB.Attributes;


    namespace MongoDB.Test
    {
        public class MongodbHelperT> where T : class
        {
            string connectionString = string.Empty;

            string databaseName = string.Empty;

            string collectionName = string.Empty;

            static MongodbHelperT> mongodb;

            #region 初始化操作
            /// summary>
    /// 初始化操作
    /// /summary>
            public MongodbHelper()
            {
                connectionString = "Server=127.0.0.1:2222";
                databaseName = "shopex";
                collectionName = "person";
            }
            #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.MapT>();
                        mapping.MapT>();
                    });

                    config.ConnectionString(connectionString);

                    return config.BuildConfiguration();
                }
            }
            #endregion

            #region 插入操作
            /// summary>
    /// 插入操作
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public void Insert(T t)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        collection.Insert(t, true);

                        mongo.Disconnect();

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

            #region 更新操作
            /// summary>
    /// 更新操作
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public void Update(T t, ExpressionFuncT, bool>> func)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        collection.UpdateT>(t, func, true);

                        mongo.Disconnect();

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

            #region 获取集合
            /// summary>
    ///获取集合
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public ListT> List(int pageIndex, int pageSize, ExpressionFuncT, bool>> func, out int pageCount)
            {
                pageCount = 0;

                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        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;
                    }
                }
            }
            #endregion

            #region 读取单条记录
            /// summary>
    ///读取单条记录
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public T Single(ExpressionFuncT, bool>> func)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        var single = collection.Linq().FirstOrDefault(func);

                        mongo.Disconnect();

                        return single;

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion

            #region 删除操作
            /// summary>
    /// 删除操作
    /// /summary>
    /// param name="person">/param>
    /// returns>/returns>
            public void Delete(ExpressionFuncT, bool>> func)
            {
                using (Mongo mongo = new Mongo(configuration))
                {
                    try
                    {
                        mongo.Connect();

                        var db = mongo.GetDatabase(databaseName);

                        var collection = db.GetCollectionT>(collectionName);

                        //这个地方要注意,一定要加上T参数,否则会当作object类型处理
    //导致删除失败
                        collection.RemoveT>(func);

                        mongo.Disconnect();

                    }
                    catch (Exception)
                    {
                        mongo.Disconnect();
                        throw;
                    }
                }
            }
            #endregion
        }

        #region 数据实体
        /// summary>
    /// 数据实体
    /// /summary>
        public class Person
        {
            [MongoAlias("_id")]
            public string ID { get; set; }

            public string Name { get; set; }

            public int Age { get; set; }

            public DateTime CreateTime { get; set; }
        }
        #endregion
    }

    您可能感兴趣的文章:
    • C#简单操作MongoDB的步骤全纪录
    • C#中如何将MongoDB->RunCommand结果映射到业务类的方法总结
    • Mongodb在CSharp里实现Aggregate实例
    • MongoDB实现基于关键词的文章检索功能(C#版)
    • C#中使用1.7版本驱动操作MongoDB简单例子
    • C# 对MongoDB 进行增删改查的简单操作实例
    • 关于C#生成MongoDB中ObjectId的实现方法
    • C#基于Mongo的官方驱动手撸一个Super简易版MongoDB-ORM框架
    上一篇:MongoDB入门教程之常用的运维技术介绍
    下一篇:MongoDB使用指南--基本操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB入门教程之C#驱动操作实例 MongoDB,入门教程,之,驱动,