c#_使用官方驅動操作mongodb資料庫
PS:大二學生,寫寫只是為了記錄和發現,境界較低,不喜勿噴。
tips:假設你已經在 windows 下安裝好了 mongodb 並且打開了資料庫服務。(也就是說,你的 mongodb 能在 mongo shell 裡跑了)
準備工作:下載 MongoDB .NET Driver == click here =>http://mongodb.github.io/mongo-csharp-driver/?_ga=1.231539542.892725284.1450600637 並將目錄下的一下一個檔案新增到引用在中
+ MongoDB.Driver.Legacy.dll
+ MongoDB.Driver.GridFS.dll
+ MongoDB.Driver.dll
+ MongoDB.Driver.Core.dll
+ MongoDB.Bson.dll
然後在程式碼中新增一下程式碼
using MongoDB.Driver
using MongoDB.Bson
1.連線資料庫
MongoClient client; MongoDatabase database; client = new MongoClient(); // 在shell下輸入db可以檢視當前正在使用的資料庫名稱 // 在shell下輸入show dbs 可以檢視當前所有的資料庫名稱 // 在shell下輸入show collections 可以檢視當前資料庫的所有collection database = client.GetDatabase(Your_Database);
至此,我們實際上已經連線好了本地的 mongodb 資料庫,不需要配置 IP 和 埠號,這裡這裡都是使用預設的(做 demo)
2.插入資料
public static void InsertBsonDocument(string collectionName) { // 獲取集合 var collection = database.GetCollection<BsonDocument>(collectionName); // BsonDocument 物件 var document = new BsonDocument { { "address" , new BsonDocument { { "street", "2 Avenue" }, { "zipcode", "10075" }, { "building", "1480" }, { "coord", new BsonArray { 73.9557413, 40.7720266 } } } }, { "borough", "Manhattan" }, { "cuisine", "Italian" }, { "grades", new BsonArray { new BsonDocument { { "date", new DateTime(2014, 10, 1, 0, 0, 0, DateTimeKind.Utc) }, { "grade", "A" }, { "score", 11 } }, new BsonDocument { { "date", new DateTime(2014, 1, 6, 0, 0, 0, DateTimeKind.Utc) }, { "grade", "B" }, { "score", 17 } } } }, { "name", "Vella" }, { "restaurant_id", "41704620" } }; // 插入資料 collection.InsertOne(document); }
插入資料的基本思路很簡單,先使用 database.GetCollection(collectionName);來獲取 collection 。之後就可以通過 InsertOne(document) 來插入資料了。
3.查詢資料
思路和上面的插入資料相同 , 也是先通過 GetCollection來獲取 collection .然後查詢
返回全部的資料
public static async void QueryCollectionSome(string collectionName)
{
var collection = database.GetCollection<BsonDocument>(collectionName);
// 相當於是一個過濾條件(這個過濾條件為空,如果使用這個過濾器,所有的資料都是表中的所有資料都是查詢的返回結果)
var filter = new BsonDocument();
// 使用await 等待查詢結果返回,再繼續執行
using (var cursor = await collection.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
Console.WriteLine(document.ToString());
}
}
}
}
返回部分滿足條件的資料
public static async Task<List<BsonDocument>> QueryCollection(string collectionName)
{
var collection = database.GetCollection<BsonDocument>(collectionName);
var filter = Builders<BsonDocument>.Filter.Eq("borough", "Manhattan");
var list = await collection.Find(filter).ToListAsync();
// 列印返回物件中滿足條件的數目
Console.WriteLine(list.Count());
return list;
}
PS : C#訪問 BsonDocument 是通過鍵值訪問的,如果 doc 是一個 BsonDocument 物件,而 name 是這個物件中的一個鍵值,則 doc[name] 這可以訪問 name 對應的資料。
4.刪除資料
/// <summary>
/// Remove All Documents That Match a Condition
/// </summary>
/// <param name="collectionName"></param>
/// <returns></returns>
public static async Task<DeleteResult> RemoveDateMatched(string collectionName)
{
var collection = database.GetCollection<BsonDocument>(collectionName);
var builder = Builders<BsonDocument>.Filter;
var filter = builder.Eq("adress.street", "3 Avenue");
// 刪除多個數據
var result = await collection.DeleteManyAsync(filter);
// 列印刪除的資料的數目
Console.WriteLine(result.DeletedCount);
return result;
}
這裡,通過 filter 找到你要刪除的資料,然後呼叫 DeleteManyAsync 方法刪除資料。
database.DropCollectionAsync(collectionName);
// 這個方法可以直接刪除一個 collection
5.更新資料(更改資料)
public static async Task<UpdateResult> UpdateOne(string collectionName)
{
var collection = database.GetCollection<BsonDocument>(collectionName);
var filter = Builders<BsonDocument>.Filter.Eq("name", "Vella");
// set({裡面是新的值})
var update = Builders<BsonDocument>.Update
.Set("cuisine", "American (New)")
.CurrentDate("lastModified");
// 修改之前的值
var a = await collection.Find(Builders<BsonDocument>.Filter.Eq("borough", "Manhattan")).ToListAsync();
foreach (var item in a)
{
// 這裡涉及到BsonDocument的資料訪問
Console.WriteLine(item["cuisine"].AsString);
}
// 執行更新操作
var result = await collection.UpdateOneAsync(filter, update);
Console.WriteLine(result.ModifiedCount);
a = await collection.Find(Builders<BsonDocument>.Filter.Eq("borough", "Manhattan")).ToListAsync();
// 顯示更新之後的值
foreach (var item in a)
{
Console.WriteLine(item["cuisine"].AsString);
}
return result;
}
這裡唯一不同的是 UpdateOneAsync 這個函式有兩個引數,第一個引數是我們通過 filter 查詢到的需要更改的資料文件,然後 第二個引數是我們設定的新的 物件的值。
至此,已通過 mongodb 官方網站提供的驅動實現了基本對資料庫各種基本的操作,其餘方法等,等到了實際開發中再去發掘和使用。