zoukankan      html  css  js  c++  java
  • c#操作MangoDB 之MangoDB CSharp Driver驱动详解

    序言

    MangoDB CSharp Driver是c#操作mongodb的官方驱动。

    官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_CSharpDriverDocs.htm#!

    驱动的具体介绍:https://docs.mongodb.org/ecosystem/drivers/csharp/

    本文主要对c#操作mongodb的增删改查,以及数据库链接配置做代码示例,方便进一步封装及学习。

    mongodb链接配置

     public class MongoConfig
        {       
            public static MongoServerSettings config = null;
            static MongoConfig()
            {
                config = MongoServerSettings.FromUrl(MongoUrl.Create(conStr));
                //最大连接池
                config.MaxConnectionPoolSize = 500;
                //最大闲置时间
                config.MaxConnectionIdleTime = TimeSpan.FromSeconds(30);
                //最大存活时间
                config.MaxConnectionLifeTime = TimeSpan.FromSeconds(60);
                //链接时间
                config.ConnectTimeout = TimeSpan.FromSeconds(10);
                //等待队列大小
                config.WaitQueueSize = 50;
                //socket超时时间
                config.SocketTimeout = TimeSpan.FromSeconds(10);
                //队列等待时间
                config.WaitQueueTimeout = TimeSpan.FromSeconds(60);
                //操作时间
                config.OperationTimeout = TimeSpan.FromSeconds(60); 
            }
            public static string conStr
            {
                get
                {
                    return ConfigurationManager.AppSettings["connectionString"];
                }
            }
            public static string mongoDB
            {
                get
                {
                    return ConfigurationManager.AppSettings["mongoDB"];
                }
            }
        }
    public class MongoCon : IDisposable
        {
            public static MongoServer mongoCon = null;
            public static MongoDatabase mongo { get; private set; }
            private bool disposed = false;
            static MongoCon()
            {
                //创建链接
                mongoCon = new MongoServer(MongoConfig.config);
                //打开链接
                mongoCon.Connect();
                //获取mongodb指定数据库
                mongo = mongoCon.GetDatabase(MongoConfig.mongoDB);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!this.disposed)
                {
                    if (disposing)
                    {
                        //释放链接
                        mongoCon.Disconnect();
                    }
                    mongoCon = null;
                }
                this.disposed = true;
            }
            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
        }

    c#操作mongodb增删改查详细

     public class DoMongo
        {
            private static MongoDatabase mdb = MongoCon.mongo;
            #region 新增
            /// <summary>  
            /// 新增  
            /// </summary>   
            public static Boolean Insert(String collectionName, BsonDocument document)
            {
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    collection.Insert(document);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            /// <summary>  
            /// 新增  
            /// </summary>   
            public static Boolean Insert<T>(String collectionName, T t)
            {
                var collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    collection.Insert(t);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            /// <summary>  
            /// 批量新增  
            /// </summary>
            public static WriteConcernResult Insert<T>(String collectionName, List<T> list)
            {
                var collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    return collection.Insert(list);
                }
                catch
                {
                    return null;
                }
            }
            #endregion
            #region 查询
            /// <summary>  
            /// 查询单个对象  
            /// </summary>    
            public static T GetModel<T>(String collectionName, IMongoQuery query)
            {
    
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    return collection.FindOneAs<T>(query);
                }
                catch
                {
                    return default(T);
                }
            }
            /// <summary>
            /// 查询对象集合
            /// </summary>
            public static List<T> GetList<T>(String collectionName, IMongoQuery query)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    return collection.FindAs<T>(query).ToList();
                }
                catch
                {
                    return null;
                }
            }
            /// <summary>
            /// 查询对象集合
            /// </summary>
            public static List<T> GetList<T>(String collectionName, IMongoQuery query, int top)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    return collection.FindAs<T>(query).SetLimit(top).ToList();
                }
                catch
                {
                    return null;
                }
            }
            /// <summary>
            /// 查询对象集合
            /// </summary>
            public static List<T> GetList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    if (isDesc)
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).ToList();
                    }
                    else
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).ToList();
                    }
                }
                catch
                {
                    return null;
                }
            }
            /// <summary>
            /// 查询对象集合
            /// </summary>
            public static List<T> GetList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    if (isDesc)
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).ToList();
                    }
                    else
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).ToList();
                    }
                }
                catch
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 查询对象集合
            /// </summary>
            public static List<T> GetList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc, int top)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    if (isDesc)
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetLimit(top).ToList();
                    }
                    else
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetLimit(top).ToList();
                    }
                }
                catch
                {
                    return null;
                }
            }
            /// <summary>
            /// 查询对象集合
            /// </summary>
            public static List<T> GetList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc, int top)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    if (isDesc)
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetLimit(top).ToList();
                    }
                    else
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetLimit(top).ToList();
                    }
                }
                catch
                {
                    return null;
                }
            }
            /// <summary>
            /// 分页查询
            /// </summary>       
            public static List<T> GetPageList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc, int index, int pageSize, out long rows)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    rows = collection.FindAs<T>(query).Count();
                    if (isDesc)
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
                    }
                    else
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
                    }
                }
                catch
                {
                    rows = 0;
                    return null;
                }
            }
            /// <summary>
            /// 分页查询
            /// </summary>       
            public static List<T> GetPageList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc, int index, int pageSize, out long rows)
            {
                MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
                try
                {
                    rows = collection.FindAs<T>(query).Count();
                    if (isDesc)
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
                    }
                    else
                    {
                        return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
                    }
                }
                catch
                {
                    rows = 0;
                    return null;
                }
            }
            #endregion
            #region 修改
            /// <summary>  
            /// 修改  
            /// </summary>    
            public static WriteConcernResult Update(String collectionName, IMongoQuery query, QueryDocument update)
            {
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    var new_doc = new UpdateDocument() { { "$set", update } };
                    //UpdateFlags设置为Multi时,可批量修改
                    var result = collection.Update(query, new_doc, UpdateFlags.Multi);
                    return result;
                }
                catch
                {
                    return null;
                }
            }
            #endregion
            #region 移除
            /// <summary>  
            /// 移除匹配的集合
            /// </summary>  
            public static Boolean Remove(String collectionName, IMongoQuery query)
            {
    
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    collection.Remove(query);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            /// <summary>  
            /// 移除所有集合  
            /// </summary>  
            public static Boolean RemoveAll(String collectionName)
            {
    
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    collection.RemoveAll();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            #endregion
            #region 其它
            /// <summary>
            /// 是否存在
            /// </summary>      
            public static bool IsExist(string collectionName)
            {
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    return collection.Exists();
                }
                catch
                {
                    return false;
                }
            }
            /// <summary>
            /// 总数
            /// </summary>      
            public static long Count(string collectionName)
            {
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    return collection.Count();
                }
                catch
                {
                    return 0;
                }
            }
            /// <summary>
            /// 总数
            /// </summary>    
            public static long Count(string collectionName, IMongoQuery query)
            {
                MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
                try
                {
                    return collection.Count(query);
                }
                catch
                {
                    return 0;
                }
            }
            #endregion
        }

    monogodb中where条件操作符号

                Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足多个条件
                Query.EQ("name", "a");//等于
                Query.Exists("type", true);//判断键值是否存在
                Query.GT("value", 2);//大于>
                Query.GTE("value", 3);//大于等于>=
                Query.In("name", "a", "b");//包括指定的所有值,可以指定不同类型的条件和值
                Query.LT("value", 9);//小于<
                Query.LTE("value", 8);//小于等于<=
                Query.Mod("value", 3, 1);//将查询值除以第一个给定值,若余数等于第二个给定值则返回该结果
                Query.NE("name", "c");//不等于
                Query.Nor(Array);//不包括数组中的值
                Query.Not("name");//元素条件语句
                Query.NotIn("name", "a", 2);//返回与数组中所有条件都不匹配的文档
                Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//满足其中一个条件
                Query.Size("name", 2);//给定键的长度
                Query.Type("_id", BsonType.ObjectId );//给定键的类型
                Query.Where(BsonJavaScript);//执行JavaScript
                Query.Matches("Title",str);//模糊查询 相当于sql中like  -- str可包含正则表达式

    小结

    此文代码主要是作为仓储的基方法进行的封装,当然如果项目结构简单也可以直接使用操作,如果你有什么疑问,或者想一起交流学习,欢迎加入左上角的群。同事也欢迎点击观看, 我的mongodb系列 

  • 相关阅读:
    对JAVA集合进行遍历删除时务必要用迭代器
    设计模式之单例模式(线程安全)
    List、Set、Map 和 Queue 之间的区别
    HashMap和Hashtable的区别
    Java WeakReference的理解与使用
    Java 理论与实践: 正确使用 Volatile 变量
    java中volatile关键字的含义
    最近5年183个Java面试问题列表及答案[最全]
    淘宝一月上钻是这样操作的
    Revit API找到风管穿过的墙(当前文档和链接文档)
  • 原文地址:https://www.cnblogs.com/knowledgesea/p/5050969.html
Copyright © 2011-2022 走看看