1. 程式人生 > >使用C#對MongoDB中的資料進行查詢,修改等操作

使用C#對MongoDB中的資料進行查詢,修改等操作

首先,使用的是官方提供的C#訪問元件https://github.com/mongodb/mongo-csharp-driver 然後、編譯後引用MongoDB.Bson.dll及MongoDB.Driver.dll,並在cs檔案中宣告引用 using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; 第一個是針對Bson格式的名稱空間,第二個是主空間,第三個是用來構造查詢和更新等條件的構造器名稱空間 一、資料庫連線 MongoClient client = null;             MongoServer
 server = null;
            //connection             string conStr = "mongodb://user:[email protected]/db1";             client = new MongoClient(conStr);             server = client.GetServer();             server.Connect(); 二、獲取資料庫內的Collection             MongoDatabase db = server.GetDatabase("db1"
);
            MongoCollection colaa = db.GetCollection("col1"); 這裡獲取在db1資料庫下,名為col1的Collection, 這裡獲取的MongoCollection支援泛型,可以按預設的BsonDocument為一行的格式獲取,也可以按自定義的類來獲取, 若按BsonDocument為一行獲取,程式碼如下(每個BsonDocument物件為Collection的一行): MongoCursor<BsonDocument> doc = colaa.FindAllAs<BsonDocument>();
            foreach (BsonDocument book in doc) {} 若按自定義的類為一行來獲取,程式碼如下:             MongoCursor<row> res = colaa.FindAllAs<row>(); foreach (row row1 in res){} 這裡要注意,如果按自定義類來獲取,那麼類需要預先定義好,且類中的變數名必須與資料庫中一致,且列數也需要一致,若出現數據庫中有某一列,但類中缺少這個物件時,會報錯,下面是一個類定義的示例:     public class row     {         public ObjectId _id;         public string name;         public string part;         public string age;     } 上例中,FindAllAs函式為全部查詢,還有一些其它行查詢及篩選方法,見http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#mongocollection-tdefaultdocument-class中的MongoCollection部分 三、讀取Collection中一行內的內容 和上面對應的,有兩種情況,如果是按自定義類來獲取的資料行,那麼直接訪問類的成員變數即可 如果是按BsonDocument獲取的,那每一行資料對應一個BsonDocument,一個BsonDocument是由多個“Name-Value"對構成的,其中Name為String格式,Value為BsonValue型別,該值可以直接使用book["name"]的格式進行訪問,關於BsonValue的進一步詳細說明,可以參考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#bsonvalue-and-subclasses中的BsonValue部分 四:新建Collection 新建Colletion很簡單,程式碼示例如下,但注意,如果已經存在了指定名稱的Collection,則會丟擲異常             //create Collection             MongoDatabase db = server.GetDatabase("db1");             var res =db.CreateCollection("col2"); 五:插入行 同樣分兩種情況,插入方式基本相同,程式碼如下:             //insert             MongoDatabase db = server.GetDatabase("db1");             MongoCollection colaa = db.GetCollection("col1");             //使用BsonDocument格式插入             BsonDocument doc = new BsonDocument { { "name""sse2" }, { "part""44224" } };             colaa.Insert(doc);             //使用自定類插入             row r1 = new row { name = "sse3", part = "554" };             colaa.Insert<row>(r1); 這裡注意一下,如果自定義類裡某一個變數沒有賦值,在插入到資料庫時,也會寫一個Null進去,而BsonDocument則不會出現這個元素,比如上兩個語句的執行結果: { "_id" : ObjectId("5355d8dfccee160de4dca545"), "name" : "sse2", "part" : "44224" } { "_id" : ObjectId("5355d93bccee16088491c420"), "name" : "sse3", "part" : "554", "age" : null } 六:更新行 更新行時需要使用到構造器構造查詢條件和更新語句,Query為查詢條件構造器,Update為更新語句構造器,程式碼示例如下: //update             MongoDatabase db = server.GetDatabase("db1");             MongoCollection colaa = db.GetCollection("col1");             var query = Query.And(                 Query.EQ("name""sse3"),                 Query.EQ("part""554")             );             var update = MongoDB.Driver.Builders.Update.Set("age""36");             colaa.Update(query, update); 七:刪除行 刪除行時也需要使用到Query構造器構造查詢條件,語句會將符合條件的行刪除掉,程式碼示例如下: //remove             MongoDatabase db = server.GetDatabase("db1");             MongoCollection colaa = db.GetCollection("col1");             var query = Query.And(                 Query.EQ("name""sse3"),                 Query.EQ("part""554")             );             var res = colaa.Remove(query);