C#實現Mongodb開發

C#實現Mongodb開發

其實在項目的前期,我完全沒有想到需要使用數據庫,但是隨着完成了Face/ Detect和Face/ Verify的封裝後,我發現顯然數據庫是必須的,原因是:牛津的FaceAPI是收費的,當客戶端每次調用的使用,都會消耗我們的寶貴資源,所以我們希望在如下的情況下用戶的請求不必再次訪問牛津FaceAPI:

  • 用戶刷新頁面時,不需要重新訪問牛津FaceAPI
  • 當用戶分享自己的測試結果,其他用戶訪問這個頁面時,不必對同樣的照片計算再次提交給牛津API

那麼爲什麼我們不採用SQL Server呢?因爲我們保存的是每次牛津的計算結果,這些結果之間沒有任何關係型需求,我們不需要事務處理,我們需要查詢效率極高,而且很重要的是:我們保存的牛津計算結果是JSON格式的數據,結合以上需求,顯然採用Mongo是明智的選擇。
從Mongo的官網下載Windos64bit的安裝文件,配置數據文件位置和日誌文件位置

  • 安裝mongo服務
mongod --dbpath="C:\mongoDb\data" --logpath="C:\mongoDb\log\mongodb.log" –install
  • 啓動服務
Net start ‘mongdb’

訪問你的http://localhost:27017/檢查服務是否正確啓動了。

目前我們的應用不需要刪除和修改,只是追加和查詢,所以我們可以寫一個簡單的MongoDBHelper來幫助我們使用MongoDB
服務器鏈接和數據庫名字都採用配置文件定義

private static string mongoDbServer = ConfigurationManager.ConnectionStrings["mongoConnection"].ConnectionString;
private static string mongoDbName = ConfigurationManager.AppSettings["mongoDb"];

private IMongoClient client;
private IMongoDatabase database;
private IMongoCollection<T> collection;

操作MongoDB可以強類型和弱類型,當然我們會選擇使用強類型不但代碼更加健壯,性能也會更好。實例化Helper時設定集合的名稱,構造函數中的T表示了我們用泛型來實現強類型的MongoDb的操作。

public MongoDBHelper(string collectionName)
{
    client = new MongoClient(mongoDbServer);
    database = client.GetDatabase(mongoDbName);
    collection = database.GetCollection<T>(collectionName);
}

目前我們提供的操作非常簡單,只有插入和查詢,不提供刪除和修改

public async Task InsertAsync(T document)
{
    await collection.InsertOneAsync(document);
}


public async Task InsertAsync(IEnumerable<T> documents)
{
    await collection.InsertManyAsync(documents);
}

public async Task<T> SelectOneAsync(Expression<Func<T, bool>> func)
{
    return await collection.Find<T>(func).FirstOrDefaultAsync();
}

public async Task<List<T>> SelectMore(Expression<Func<T, bool>> func)
{
    return await collection.Find(func).ToListAsync();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章