使用C#對MongoDB中的資料進行查詢,修改等操作
阿新 • • 發佈:2018-12-24
首先,使用的是官方提供的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);