首先,使用的是官方提供的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:pw@127.0.0.1/db1"; client = new MongoClient(conStr); server = client.GetServer(); server.Connect();
注意串連串的寫法,上面的寫法是帶使用者認證的,關於串連串寫法的更多資訊可以參考http://docs.mongodb.org/ecosystem/tutorial/authenticate-with-csharp-driver/
二、擷取資料庫內的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 }
還有一些的方法,例如批量寫入等,可以參考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#insertbatch-method中的相應內容
六:更新行更新行時需要使用到構造器構造查詢條件和更新語句,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);
其它還有一些更新的函數,比如更新和插入為一體的Save等,可以參考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#save-tdocument-method的相應內容
七:刪除行刪除行時也需要使用到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);