简介
MongoDB是非关系型、文档型的数据库,方便之处在于可以直接存取class类型……官网定期会开设Free的课程,上一个项目中使用到MongoDB,现在我做的项目用的是EF,所以想将MongoDB用过的方法、注意的事项和一些想法总结一下,毕竟,如果再次使用的话林林总总去拼凑还是要浪费时间的。
DLL
(1) MongoDB.Bson.dll
(2) MongoDB.Driver.dll
软件
很好的可视化软件,MongoVUE
方法
连接
//Mongo数据库名称
private MongoDatabase Mg_db;
//Mongo数据库集合名称
public MongoCollection Mg_col;
//MongoServer
private MongoServer mongoServer;
//连接字符串(以mongodb://开头)
string connectionString = "mongodb://localhost";//或者是192.xxx.xxx.xxx
//string constr = "mongodb://" + ip + ":" + port; //连接ip和该port
//连接Mongo数据库
var client = new MongoClient(connectionString);
//得到一个客户端引用
mongoServer = client.GetServer();
创建数据库
Mg_db = mongoServer.GetDatabase(dbName); //dbName是新库的名字 //如果已有dbName这个库,那Mg_db是get这个库,否则就是创建
创建表(集合)
Mg_col = Mg_db.GetCollection
(connectionName); //connectionName是新表的名字 //如果该库已有connectionName这个表,那Mg_col 是get这个表,否则就是创建
在表中插入数据
public void Insert
(string dbName, string connectionName, T t) { Mg_db = mongoServer.GetDatabase(dbName); //get 某个库 MongoCollection collection = Mg_db.GetCollection
(connectionName); //get该库某个表 collection.Insert(t); //插入(任意类型) }
在表中删除数据
public void delete
(string dbName, string connectionName, string key, BsonValue value) { Mg_db = mongoServer.GetDatabase(dbName); Mg_col = Mg_db.GetCollection
(connectionName); var query = Query.EQ(key, value); //查询条件,eg:我要删除name是张三的该条数据,key,字段名,value是张三 Mg_col.Remove(query); }
更新表中的某一条数据
public void UpData(string dbName, string connectionName, string key, BsonValue value, People t) { Mg_db = mongoServer.GetDatabase(dbName); Mg_col = Mg_db.GetCollection(connectionName); var query = Query.EQ(key, value); People temp = Mg_col.FindOneAs
(query); //根据查询条件获取表中People类型的数据temp,这也是我们要更新的数据 t.id = (temp as People).id; //t是People类型的一条新数据,它拿到要更新数据的id Mg_col.Update(query, Update.Replace(t)); }
查找某个表符合条件的对象并返回
public T Find
(string dbName, string connectionName, string key, BsonValue value) { Mg_db = mongoServer.GetDatabase(dbName); MongoCollection collection = Mg_db.GetCollection
(connectionName); var query = Query.EQ(key, value); T result = collection.FindOneAs
(query); return result; }
查找某个表符合条件的对象个数
public long FindSameNameCollectionNum(string dbName, string collcetionName, string key, BsonValue value) { Mg_db = mongoServer.GetDatabase(dbName); Mg_col = Mg_db.GetCollection(collcetionName); var query = Query.EQ(key, value); long count = Mg_col.Count(query); return count; }
获取某个表中的所有对象
public List
GetProjectArray
(string dbName, string connectionName) { Mg_db = mongoServer.GetDatabase(dbName); Mg_col = Mg_db.GetCollection(connectionName); //获取该集合所有对象 var result = Mg_col.FindAllAs
(); List
pList = new List
(); pList.AddRange(result); return pList; }
存储影音文本数据放在GridFS
MongoDB中每个库对应一个GridFS文件夹用来存放影音文本……
可以在这里用程序添加
可以直接在MongoVUE中添加
public void AddFileInGridFS(string dbName, string filePath) { Mg_db = mongoServer.GetDatabase(dbName); MongoGridFS gridfs = Mg_db.GridFS; gridfs.Upload(filePath); }
取出放在GridFS中的数据
public void LoadFileInGridFS(string dbName, string fileName) { Mg_db = mongoServer.GetDatabase(dbName); MongoGridFS gridfs = Mg_db.GridFS; gridfs.Download(fileName); }
取出放在GridFS中的数据保存在Byte[]中
public byte[] ReadFileFromfs(string dbName, string fileN