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

你可能感兴趣的:(mongodb,数据库,C#)