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);