MongoDB使用總結(C#版),

來源:互聯網
上載者:User

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.一個表可以存多種類型的資料,但是最好不要這樣,讀取的時候很麻煩,拆箱裝箱極易錯,還是一個表一種類型為好。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.