MongoDB使用總結(C#版),
簡介
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;//MongoServerprivate 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<T>(connectionName);//connectionName是新表的名字//如果該庫已有connectionName這個表,那Mg_col 是get這個表,否則就是建立
在表中插入資料
public void Insert<T>(string dbName, string connectionName, T t) { Mg_db = mongoServer.GetDatabase(dbName); //get 某個庫 MongoCollection collection = Mg_db.GetCollection<T>(connectionName); //get該庫某個表 collection.Insert(t); //插入(任意類型) }
在表中刪除資料
public void delete<T>(string dbName, string connectionName, string key, BsonValue value){ Mg_db = mongoServer.GetDatabase(dbName); Mg_col = Mg_db.GetCollection<T>(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<People>(query); //根據查詢條件擷取表中People類型的資料temp,這也是我們要更新的資料 t.id = (temp as People).id; //t是People類型的一條新資料,它拿到要更新資料的id Mg_col.Update(query, Update.Replace(t));}
尋找某個表合格對象並返回
public T Find<T>(string dbName, string connectionName, string key, BsonValue value) { Mg_db = mongoServer.GetDatabase(dbName); MongoCollection collection = Mg_db.GetCollection<T>(connectionName); var query = Query.EQ(key, value); T result = collection.FindOneAs<T>(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<T> GetProjectArray<T>(string dbName, string connectionName) { Mg_db = mongoServer.GetDatabase(dbName); Mg_col = Mg_db.GetCollection(connectionName); //擷取該集合所有對象 var result = Mg_col.FindAllAs<T>(); List<T> pList = new List<T>(); 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 fileName, byte[] bytes){ Mg_db = mongoServer.GetDatabase(dbName); MongoGridFS gridfs = Mg_db.GridFS; MongoGridFSStream gridFileStream = gridfs.OpenRead(fileName); bytes = new byte[gridFileStream.Length]; gridFileStream.Read(bytes, 0, bytes.Length); return bytes;}
注意事項
1.庫名不可以是中文,會報錯。
2.private的資料無法存入MongoDB中。
3.要存入的class,結構中添加using MongoDB.Bson;並添加 public ObjectId id { get; set; },這個id存入後自增長。
體會
1.MongoDB的結構庫—-集合—-對象,這裡的集合就是表,但是我說的是”集合“,以至於上面的方法中我定義的都是collection,同樣的,我強調的還有對象這個概念
2.一個表可以存多種類型的資料,但是最好不要這樣,讀取的時候很麻煩,拆箱裝箱極易錯,還是一個表一種類型為好。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。