搭建基于MongoDB的文件管理系统(一) - 作业部落 Cmd Markdown 编辑阅读器
Excerpt
Cmd Markdown 编辑阅读器,支持实时同步预览,区分写作和阅读模式,支持在线存储,分享文稿网址。
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
1 2
| var client = new MongoClient("mongodb://127.0.0.1:27017"); var database = client.GetDatabase("testDB");
|
@设置 GridFS
1
| var fs = new GridFSBucket(database);
|
@上传 文件流到数据库,GridFS,此时应该是同步的操作,异步操作暂时没学习 ^_^
1 2 3 4 5 6 7 8 9 10 11
| 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 做异常捕获
1 2 3 4 5 6
| private static void DownloadFile(GridFSBucket fs, ObjectId id) { var t = fs.DownloadAsBytesAsync(id); Task.WaitAll(t); var bytes = t.Result; }
|
@上传JSON格式的数据到mongoDB,并且可以主动新增属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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格式的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| 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 ""; } }
|