1. 程式人生 > >c#_使用官方驅動操作mongodb資料庫

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 官方網站提供的驅動實現了基本對資料庫各種基本的操作,其餘方法等,等到了實際開發中再去發掘和使用。