MongoDb C# Wrapper 类 (MongoDb Driver 1.9)

来源:互联网 发布:物联网域名 编辑:程序博客网 时间:2024/05/16 09:11

1.安装 mongoDb Driver package 

2. 使用Wrapper 类:


 public class MongoDbWrapper : IDisposable    {        private MongoServer _server;        private MongoDatabase _db;        public MongoDbWrapper()        {            var uri = ConfigurationSettings.AppSettings["mongoUrl"];            var url = new MongoUrl(uri);            var client = new MongoClient(url);            _server = client.GetServer();            _db = _server.GetDatabase(url.DatabaseName);        }        public MongoDbWrapper BatchAdd<T>(T[] objArray, string collectionName)        {            var collection = _db.GetCollection<T>(collectionName);            collection.InsertBatch(objArray);            return this;        }        public MongoDbWrapper Add<T>(T obj, string collectionName)        {            var collection = _db.GetCollection<T>(collectionName);            collection.Insert(obj);            return this;        }        /// <summary>        /// e.g. { "Age", new BsonDocument { { "$gte", 10 } } }        /// </summary>        /// <param name="query"></param>        /// <param name="collectionName"></param>        public void DeleteBy<T>(Expression<Func<T, bool>> whereExp, string collectionName)        {            var collection = _db.GetCollection<T>(collectionName);            collection.Remove(Query<T>.Where(whereExp));        }        public void Update<T>(IMongoQuery query, string collectionName, T newObj) where T : IMongoUpdate        {            var collection = _db.GetCollection<T>(collectionName);            collection.Update(query, newObj);        }        public IEnumerable<T> Search<T>(Expression<Func<T, bool>> whereExp, string collectionName)        {            var collection = _db.GetCollection<T>(collectionName);            return collection.Find(Query<T>.Where(whereExp)).ToList();        }        public T Single<T>(Expression<Func<T, bool>> whereExp, string collectionName)        {            return Search(whereExp, collectionName).Single();        }        public void RemoveCollection(string collectionName)        {            _db.DropCollection(collectionName);        }        public void Dispose()        {            _server.Disconnect();        }    }

3 一些相关操作的用法示例

查询var driver = dbWrapper.Single<Driver>(d => d.Name == name, DbCollectionName.For<Driver>());var drivers = dbWrapper.Search<Driver>(d => d.Name == name, DbCollectionName.For<Driver>());删除dbWrapper.DeleteBy<Job>(j => j.Id == id, DbCollectionName.For<PublicQueue>());从集合移除var updatingNw = Update<Network>.Pull(nw => nw.Jobs, aJobFromQueue);                dbWrapper.Update(Query<Network>.Where(n => n.Name == Name), DbCollectionName.For<Network>(), updatingNw);添加新项到集合var updatingDp = Update<Dispatcher>.AddToSet<dynamic>(d => d.PendingJobs, aJobFromQueue);                dbWrapper.Update(Query<Dispatcher>.Where(d => d.Name == name), DbCollectionName.For<Dispatcher>(), updatingDp);更新dbWrapper.Update(Query<Network>.Where(n => n.Name == Name), DbCollectionName.For<Network>(), updatingNw);


0 0
原创粉丝点击