@KingMe
2015-12-15T15:35:34.000000Z
字数 2342
阅读 3733
MongoDB
文件管理
.NET
官网最新版本 V3.2.0,不推荐使用3.0之前的版本
mongod
启动本地mongo服务,无任何参数,默认会要求在当前目录的根目录下存在data/db目录,用于存放文件mongo
默认会连接到已经启动的实例,配合上面的命令,可以直接连接到已经启动的服务mongo 127.0.0.1:27017/myDB
这里可以连接到网络上的mongodb服务的 myDB数据库,只能能够访问,一般部署在安全的内网环境
通过 --nodb 参数可以不连接到任何mongod服务drop
命令速度非常快,但是需要重新建立索引
@链接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 "";
}
}