標籤:
想要在C#中使用MongoDB,首先得要有個MongoDB支援的C#版的驅動。C#版的驅動貌似有很多種,如官方提供的samus。 實現思路大都類似。這裡我們用官方提供的mongo-csharp-driver :
:http://github.com/mongodb/mongo-csharp-driver/downloads
解壓之後得到兩個dll:
MongoDB.Driver.dll:顧名思義,驅動程式
MongoDB.Bson.dll:序列化、Json相關
然後在我們的程式中引用這兩個dll。
2、串連資料庫
[csharp] view plain copy
- using MongoDB.Bson;
- using MongoDB.Driver;
[csharp] view plain copy
- //資料庫連接字串
- const string strconn = "mongodb://127.0.0.1:27017";
- //資料庫名稱
- const string dbName = "test";
- MongoServer server;
- MongoDatabase db;
- void Init()
- {
- //建立資料庫連結
- server = MongoDB.Driver.MongoServer.Create(strconn);
- //獲得資料庫
- db = server.GetDatabase(dbName);
- }
3、查詢資料
1)查詢規則集合
[csharp] view plain copy
- class Users
- {
- public ObjectId _id;//BsonType.ObjectId 這個對應了 MongoDB.Bson.ObjectId
- public string Name { get; set; }
- public string Sex { set; get; }
- }
- const string ENTER = "\r\n";
- private void btnQuery_Click(object sender, EventArgs e)
- {
- //擷取Users集合
- MongoCollection col = db.GetCollection("Users");
- //查詢全部集合裡的資料
- var result1 = col.FindAllAs<Users>().ToList();
- StringBuilder sb = new StringBuilder("");
- foreach (Users user in (List<Users>)result1)
- {
- sb.Append(user.Name + ENTER);
- }
- MessageBox.Show(sb.ToString());
- }
這種方式只適合每個文檔(document)結構都一樣的集合:
但是NoSql詬病關係型資料庫的論點之一,就是這種所謂每條記錄的結構都要保持一致的情況,因為有些欄位不是所有記錄的必須。那麼,在mongoDB這裡,對於集合中文檔結構不一致的情況下,上述代碼擷取不到資料,似乎應該採用如下方式:
2)查詢不規則集合
集合情況:
在集合thins裡,基本上每個文檔結構都不一樣。
尋找代碼如下:
[csharp] view plain copy
- private void btnQuery2_Click(object sender, EventArgs e)
- {
- //擷取thins集合
- MongoCollection col = db.GetCollection("thins");
- //查詢全部集合裡的資料
- var result1 = col.FindAllAs<BsonDocument>().ToList();
- StringBuilder sb = new StringBuilder("");
- foreach (BsonDocument bd in (List<BsonDocument>)result1)
- {
- string name = bd.Contains("name") ? bd.GetValue("name").ToString() : "不存在";
- sb.Append(name + ENTER);
- }
- MessageBox.Show(sb.ToString());
- }
mongodb 查詢的用法