当前位置: 首页 > 工具软件 > mongoHelper > 使用案例 >

MongoHelper(感觉这个很不错!)

孟哲
2023-12-01
///* Mike Cheers *///
///* 2011-12-17  *///

namespace MongoDBLib
{
    using System;
    using MongoDB.Bson;
    using MongoDB.Driver;
    using MongoDB.Driver.Builders;
    using System.Collections;
    using System.Linq;
    using System.Collections.Generic;

    public sealed class MongoHelper<TClass> : IDisposable
    {
        private static volatile MongoHelper<TClass> instance = null;
        public Boolean IsDisposed { get; private set; }
        private static object threadSafeLocker = new object();
        private MongoServer DBServer = null;

        private MongoHelper(MongoServerSettings server_settings)
        {
            DBServer = MongoServer.Create(server_settings);
            if (DBServer.State != MongoServerState.Connected)
                DBServer.Connect();
        }

        public static MongoHelper<TClass> GetDBInstance(string serviceInfo)
        {
            if (null == instance)
            {
                lock (threadSafeLocker)
                {
                    if (null == instance || instance.IsDisposed || instance.DBServer.State != MongoServerState.Connected)
                    {
                        List<MongoServerAddress> slist = new List<MongoServerAddress>();
                        MongoServerAddress def = new MongoServerAddress(serviceInfo, 27017);
                        slist.Add(def);
                        MongoServerSettings settings = new MongoServerSettings();
                        settings.ConnectionMode = ConnectionMode.Direct;
                        settings.ConnectTimeout = TimeSpan.FromSeconds(30);
                        settings.GuidRepresentation = GuidRepresentation.CSharpLegacy;
                        settings.IPv6 = false;
                        settings.MaxConnectionIdleTime = TimeSpan.FromMinutes( 10);
                        settings.MaxConnectionLifeTime = TimeSpan.FromMinutes(30);
                        settings.MaxConnectionPoolSize = 100;
                        settings.MinConnectionPoolSize = 0;
                        settings.SafeMode = new SafeMode(true);
                        settings.Servers = slist.Cast<MongoServerAddress>();
                        settings.SlaveOk =  true;
                        settings.SocketTimeout = TimeSpan.FromSeconds(30);
                        settings.WaitQueueSize = 250;
                        settings.WaitQueueTimeout = TimeSpan.FromMilliseconds(500);
                        instance = new MongoHelper<TClass>(settings);
                    }
                }
            }

            return instance;
        }

        public long Count(String database_name
            , String collection_name
            , IMongoQuery query)
        {
            return instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .Count(query);
        }

        public TClass FindOneById(String database_name
            , String collection_name
            , BsonValue id)
        {
            return instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .FindOneByIdAs<TClass>(id);
        }

        public TClass FindOne(String database_name
            , String collection_name
            , IMongoQuery query)
        {
            return instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .FindOneAs<TClass>(query);
        }

      
        public MongoCursor<TClass> FindAll(String database_name
            , String collection_name
            , IMongoQuery query)
        {
            return instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .FindAs<TClass>(query);
        }

        public MongoCursor<TClass> FindPage(String database_name
            , String collection_name
            , IMongoQuery query
            , IMongoSortBy sortby
            , int pageIndex
            , int pageSize)
        {
            MongoCursor<TClass> cursor = instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .Find(query)
                .SetSortOrder(sortby);
            cursor.Skip = pageIndex * pageSize;
            cursor.Limit = pageSize;
            return cursor;
        }

        

        public bool IsExists(String database_name
            , String collection_name
            ,IMongoQuery query)
        {
            return instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .Count(query) > 0;
        }

        public SafeModeResult Remove(String database_name
            , String collection_name
            , IMongoQuery query)
        {
            return Remove(database_name
                , collection_name
                , Query.And(query)
                );
        }

        public SafeModeResult RemoveById(String database_name
            , String collection_name
            , BsonValue id)
        {
            return Remove(database_name
                , collection_name
                , Query.EQ("_id", id));
        }

        public SafeModeResult RemoveAll(String database_name
            , String collection_name)
        {
            SafeModeResult result = instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .RemoveAll();
            return result;
        }

        public SafeModeResult Add(String database_name
            , String collection_name
            , TClass document)
        {
            SafeModeResult result = instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .Insert(document);
            return result;
        }

        public IEnumerable<SafeModeResult> AddBatch(String database_name
            , String collection_name
            , IEnumerable<TClass> documents)
        {
            IEnumerable<SafeModeResult> results = instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .InsertBatch(documents);
            return results;
        }

        public SafeModeResult Update(string database_name
            , string collection_name
            , BsonValue key, TClass document)
        {
            return Update(database_name
                , collection_name
                , Query.And(Query.EQ("_id", BsonValue.Create(key)))
                , document);
        }

        public SafeModeResult Update(string database_name
            , string collection_name
            , IMongoQuery query, TClass document)
        {
            return instance.DBServer.GetDatabase(database_name)
                .GetCollection<TClass>(collection_name)
                .Update(query, new UpdateDocument(document.ToBsonDocument<TClass>()));
        }

        #region IDisposable Members
        public void Dispose()
        {
            try
            {
                instance.DBServer.Disconnect();
            }
            catch { }

            IsDisposed = true;
        }
        #endregion

        public IEnumerable<string> GetDatabaseNames()
        {
            return instance.DBServer.GetDatabaseNames();
        }

        public MongoDatabase GetDatabase(string dbname)
        {
            return instance.DBServer.GetDatabase(dbname);
        }

        public IEnumerable<BsonValue> Distinct(string dbname, String collectionname, string key)
        {
            return Distinct(dbname, collectionname, key, Query.Null);
        }

        public IEnumerable<BsonValue> Distinct(string dbname, String collectionname, string key, IMongoQuery query)
        {
            return instance.DBServer.GetDatabase(dbname).GetCollection(collectionname).Distinct(key, query);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;

using MongoDBLib;


namespace MongoDBDemo
{
    public class Entity
    {
        public ObjectId Id { get; set; }
        public string Name { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var connectionString = "127.0.0.1";
            var server = MongoHelper<Entity>.GetDBInstance(connectionString);
            var database = server.GetDatabase("test");
            var collection = database.GetCollection<Entity>("entities");

            var entity = new Entity { Name = "Tom" };
            collection.Insert(entity);
            var id = entity.Id;

            var query = Query.EQ("_id", id);
            entity = collection.FindOne(query);

            entity.Name = "Dick";
            collection.Save(entity);

            var update = Update.Set("Name", "Harry");
            collection.Update(query, update);

            collection.Remove(query);
        }
    }
}


 类似资料: