您的位置:首页 > 数据库 > Mongodb

MongoDB对文件的增、删、查

2015-11-28 16:54 633 查看
            最近做一级的项目,老师要求学生的答题的word,excel,ppt都要保存上,以便学生以后来咨询的时候老师能拿出来学生当时的答题情况,所以就有了这么一个情况,就是保存学生的答题记录,所以我想了一下,既然只是保存答题的一些信息,就用了MongoDB去实现文件的存取。

       安装

       对于MongoDB的安装,我就不在赘述了,大家有不懂得,大家照着这篇博客一点一点的操作就可以:http://blog.csdn.net/lovemenghaibin/article/details/43205475

           因为咱们要实现GridFS对数据的存取,所以还需要两个驱动MongoDB.Bson.dll,MongoDB.Driver.dll

     增删差

       上传

       上传话用到了GridFS的upload方法,所以我的方法就和他起了一样的名字,代码如下:
/// <summary>
/// 上传学生答题记录的压缩包到数据库Upload
/// </summary>
/// <param name="strSourceFile">学生答题记录的压缩包,例如D:\\11070141021</param>
/// <param name="strFileName">数据库中保存的文件名称(使用学好).例如:11070141021</param>
/// <param name="strGridFS">GRIDFS保存的数据集合的名称</param>
public void Upload(string strSourceFile, string strFileName, string strGridFS)
{

//定义一个本地文件的路径字符串
string localFileName = strSourceFile;
//定义mongoDB数据库中文件的名称
string mongoDBFileName = strFileName;
//设置GridFS文件中对应的集合前缀名
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFS };
//实例化一个GridFS
MongoGridFS gridfs = new MongoGridFS(database, fsSetting);
//将本地文件上传到mongoDB中去,以默认块的大小256KB对文件进行分块
gridfs.Upload(localFileName, mongoDBFileName);
}

      查询

      Mongo的保存文件信息的时候他就是保存的Bson,所以我们读取的时候就以json的形式都出来,至于咱们用的时候怎么转化成DataTable,大家网上找一下就可以,我这里就直接返回json了。
       
/// <summary>
/// 获取集合GetInfoList
/// </summary>
/// <param name="fileName">查询的关键字,以学好信息为准</param>
/// <param name="strGridFs">GridFS的名称</param>
/// <returns></returns>
public string GetInfoList(string fileName, string strGridFs)
{
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFs };
MongoGridFS fs = new MongoGridFS(database, fsSetting);

MongoCollection collection = database.GetCollection(strGridFs + ".files");

string filesJSON = "[";

//排序方法-按照时间降序排列
SortByDocument sort = new SortByDocument {
{"filename", 1},
{"uploadDate", -1}
};

//关键字查询
Regex findby = new Regex(@".*" + fileName + ".*", RegexOptions.IgnoreCase);
QueryDocument query = new QueryDocument
{
{"filename", findby}
};

MongoCursor<MongoGridFSFileInfo> docList = fs.Find(query).SetSortOrder(sort);
foreach (MongoGridFSFileInfo doc in docList)
{
UInt32 length = Convert.ToUInt32(doc.Length);
string size = null;
if (length > 1024 * 1024)
size = ((double)length / 1024 / 1024).ToString("F2") + "MB";
else if (length > 1024)
size = ((double)length / 1024).ToString("F2") + "KB";
else
size = length.ToString() + "B";
filesJSON += "{\"name\":\"" + doc.Name + "\",\"lastModify\":\"" + Convert.ToDateTime(doc.UploadDate).ToLocalTime().ToString() + "\", \"size\":\"" + size + "\"},";

}
if (filesJSON.EndsWith(","))
{
filesJSON = filesJSON.Substring(0, filesJSON.Length - 1);
}
filesJSON += "]";

return filesJSON;

}

       下载(Download)

       下载非常的简单,就是一个DownLoad方法
/// <summary>
/// 下载指定的文件DownLoad
/// </summary>
/// <param name="strGridFs"></param>
/// <param name="strFileName"></param>
public void DownLoad( string strFileName,string strGridFs)
{
//设置GridFS文件中对应的集合前缀名
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFs };
//实例化一个GridFS
MongoGridFS fs = new MongoGridFS(database, fsSetting);
//根据学好拼接出一个压缩包的名称
string fileName = strFileName ;
fs.Download(fileName);
}

      删除

      删除和下载几乎一样,直接调用一个方法就可以。
/// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <param name="strGridFS">GridFS的学院名称</param>
public void Delete(string fileName, string strGridFS)
{
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFS };

MongoGridFS fs = new MongoGridFS(database, fsSetting);
fs.Delete(fileName);
}
       看是不是非常的简单,但是这个下载却折磨了我整整一天,找了很多的方法,都没有可以替代的,最后才发现,原来是我链接数据库的字符串不对,所以才导致了不能下载和删除的操作,链接字符串的时候要在后边加一句safe=true,例如:  private string connectionString = "mongodb://localhost:27017/?safe=true";


       客户端

<span style="font-weight: normal;"> private void button1_Click(object sender, EventArgs e)
{
ZipHelper.CreateZip(@"F:\360Apps", @"F:\360Apps.zip");
//申明一个实例
MongoHelper mh = new MongoHelper("menghaibin");
//上传
mh.Upload(@"d:\110701410211.zip", "110701410211.zip", "test");
//查询
string json = mh.GetInfoList("1107014", "test");
//下载
mh.DownLoad( "110701410211.zip","test");
//删除
mh.Delete("110701410211.zip", "test");
}</span>

       这样一个简单的MongoDB对数据库的操作就算是完成,当然原理的东西,我以后慢慢讲吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: