[关闭]
@KingMe 2015-12-15T07:35:34.000000Z 字数 2342 阅读 3583

搭建基于MongoDB的文件管理系统(一)

MongoDB 文件管理 .NET


1.MongoDB 介绍

Mongodb官网

官网最新版本 V3.2.0,不推荐使用3.0之前的版本

2.基础Shell 操作(备忘)

mongod
启动本地mongo服务,无任何参数,默认会要求在当前目录的根目录下存在data/db目录,用于存放文件

mongo
默认会连接到已经启动的实例,配合上面的命令,可以直接连接到已经启动的服务

mongo 127.0.0.1:27017/myDB
这里可以连接到网络上的mongodb服务的 myDB数据库,只能能够访问,一般部署在安全的内网环境
通过 --nodb 参数可以不连接到任何mongod服务

drop
命令速度非常快,但是需要重新建立索引

3. C#驱动操作MongoDB数据库,代码示例(GridFS)

@链接mongodb服务,设置当前数据库为 testDB

var client = new MongoClient("mongodb://127.0.0.1:27017");
var database = client.GetDatabase("testDB");

@设置 GridFS

var fs = new GridFSBucket(database);

@上传 文件流到数据库,GridFS,此时应该是同步的操作,异步操作暂时没学习 ^_^

    private static ObjectId UploadFile(GridFSBucket fs)
    {
        using (var s = File.OpenRead(@"C:\Pictures\Q.png"))
        {
            var t = Task.Run<ObjectId>(() =>
            {
                return fs.UploadFromStreamAsync(s.Name, s);
            });
            return t.Result; //返回值是mongodb的ObjectId类型,可以直接.toString转换成字符串进行持久化
        }
    }

@从MongoDB下载文件
@这里没有进行判断文件是否存在,直接使用ObjectId进行查找,然后下载,TODO 做异常捕获

    private static void DownloadFile(GridFSBucket fs, ObjectId id)
    {
        var t = fs.DownloadAsBytesAsync(id);
        Task.WaitAll(t);
        var bytes = t.Result;
    }

@上传JSON格式的数据到mongoDB,并且可以主动新增属性

    public static ObjectId UploadJsonToMongoDB(string json, Dictionary<string, string> otherKv, string _database, string _collection)
    {
        MongoDB.Bson.BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<MongoDB.Bson.BsonDocument>(json);
        ObjectId oId = ObjectId.GenerateNewId();
        document.Add("_id", oId);//添加ObjectId,一般使用驱动设置,如果不指定,保存到数据库时会自动添加
        foreach (var kv in otherKv)
        {
            document.Add(kv.Key, kv.Value);
        }
        var database = client.GetDatabase(_database);
        var collection = database.GetCollection<BsonDocument>(_collection);
        collection.InsertOneAsync(document);
        return oId;
    }

@从mongoDB中下载json格式的数据

    public static string GetJsonFromMongoDB(string objid, FilterDefinition<BsonDocument> _filter, string _database, string _collection)
    {
        var database = client.GetDatabase(_database);
        var collection = database.GetCollection<BsonDocument>(_collection);
        FilterDefinition<BsonDocument> filter = null;
        if (!string.IsNullOrEmpty(objid))
        {
            ObjectId oId = new ObjectId(objid);
            filter = Builders<BsonDocument>.Filter.Eq("_id", oId);
        }
        else if (_filter != null)
        {
            filter = _filter;
        }
        var documents = collection.Find(filter).ToListAsync();
        var t = Task.Run(() =>
        {
            return collection.Find(filter).ToListAsync();
        });
        if (t.Result.Count > 0)
        {
            var jsonWriterSettings = new MongoDB.Bson.IO.JsonWriterSettings { OutputMode = MongoDB.Bson.IO.JsonOutputMode.Strict };
            //这里的OutputMode是为了输出可以直接被js接受的json数据
            return t.Result[0].ToJson(jsonWriterSettings);
        }
        else
        {
            return "";
        }
    }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注