MongoDB对文件的增、删、查

            最近做一级的项目,老师要求学生的答题的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对数据库的操作就算是完成,当然原理的东西,我以后慢慢讲吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值