0%

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

搭建基于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 "";
}
}