[.NET] MongoDB 基本新增、讀取、更新、刪除 (CRUD) 操作

介紹如何在 ASP.NET 上使用 MongoDB 進行基本 CRUD 的操作。

前言


在上一篇文章中介紹了如何在 Windows 上安裝執行 MongoDB,接下來就來介紹一下如何在 ASP.NET 上使用 MongoDB 進行 CRUD 的操作,MongoDB 對 C# 語言進行了支援並提供了 C# 操作的 Driver,在接下來的步驟裡就是要透過使用 MongoDB C# Driver 來進行操作。

 

建立網站並安裝 MongoDB C# Driver


首先建立一個測試網站,接著透過 NuGet 直接安裝對於 MongoDB C# Driver 套件,如下。

 

MongoDB C# Driver 包含了兩個 DLL 及 Bson 與 Driver,Driver 是相依於 Bson 之上,用於處理 Bson 規範的相關工作,例如 I/O、序列化或針對BSON 模型的處理等等,Bson 能夠單獨使用,必要時再透過 Driver 進行操作。

 

在使用 MongoDB 基本上會 using 以下兩個命名空間。


using MongoDB.Bson;
using MongoDB.Driver;

 

新增、讀取、更新、刪除操作


建立 MongoDB 連線

在透過 NuGet 安裝好 MongoDB C# Driver 後,就開始來進行最基本的資料庫 CRUD 操作吧,首先建立一個 Product Entity 類別 ,此類別將用於處理存放操作所需用到的屬性,如下。


using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class Product
{
    [BsonId]
    public string ID { get; set; }
    public string ProductName { get; set; }
    public decimal ProductPrice { get; set; }
}

 

在以上 Entity 類別中,您會發現在 ID 的地方使用了 BsonIdAttribute 屬性,在 MongoDB 中的 Entity 類別預設是使用 ObjectId 型別當作資料的鍵值,當如果想自訂資料鍵值時,就必須要在自訂的鍵值屬性上加上 BsonIdAttribute 屬性。

 

接下來建立 ProductDao 類別,此類別將用於處理資料存取的操作,如下


using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class ProductDao
{
	public ProductDao()
	{
	}
}

 

其次要連線到 MongoDB 需要一組連線字串,而 MongoDB 的連線字串格式如下。

mongodb://localhost

以上是一個本機連線的範例,如果正式發布時可能資料庫與網站不同機器,則連線字串可能會如下所示。

mongodb://10.10.1.17:27017

注意,如果連線字串中未包含 mongodb:// 將會發生錯誤。

 

接下來在 ProductDao 建構子中設定連線字串,當然連線字串要設定到 Web.Config 中會比較恰當,在此請容許我偷懶一下,繼續由毽子中透過 MongoClient 物件依序取得 Server、Database、Collection 物件,如下。


public class ProductDao
{
    private MongoClient _mongoClient;
    private MongoServer _mongoServer;
    private MongoDatabase _mongoDatabase;
    private MongoCollection<Product> _mongoCollection;

	public ProductDao()
	{
        // MongoDB 連線字串
        string connectionString = "mongodb://localhost";
        // 產生 MongoClient 物件
        _mongoClient = new MongoClient(connectionString);
        // 取得 MongoServer 物件
        _mongoServer = _mongoClient.GetServer();
        // 取得 MongoDatabase 物件
        _mongoDatabase = _mongoServer.GetDatabase("test");
        // 取得 Collection
        _mongoCollection = _mongoDatabase.GetCollection<Product>("Products");
	}
}

 

以上步驟就是先透過建立 MongoClient 物件取得連線後,在使用 MongoClient 類別的 GetServer() 方法取得服務參考,最後再透過 MongoServer 物件的 GetDatabase(connectionString) 方法取得 MongoDatabase 物件參考,有了 MongoDatabase 物件就可以對該資料庫進行操作了,而上面填入的 test 資料庫則是根據你要操作的資料庫填入資料庫名稱,如 test 資料庫並不存在時,將會自動建立一個 test 資料庫,最後直接取得 Product Collection 物件。

 

註:針對 MongoDB 中使用的名詞與 SQL Server 上的差異可以參考以下表格。

項目 SQL Server 名稱 MongoDB 名稱
資料庫 Database Database
資料表 Table Collection
資料列 Row Document or BSON Document
資料欄 Column Field

 

加入查詢方法

連線撰寫完成後就可以開始撰寫查詢功能,在 ProductDao 類別中加入 GetAll() 方法用來取得全部資料,如下。


public IQueryable GetAll()
{
    return _mongoCollection.AsQueryable();
}

 

加入 GetById(string id) 方法,用來取得單一筆資料。


public Product GetById(string id)
{
    var query = Query.EQ(p => p.ID, id);
    return _mongoCollection.FindOne(query);
}

 

在查詢單一筆資料時使用了 Query<T> 類別,Query<T> 類別是一個建構實體查詢條件的物件,透過 Query<T> 類別的 EQ 方法使用 Linq.Expression 比較值是否相等。

 

加入新增方法

新增直接呼叫 MongoCollection 類別提供的 Insert 方法傳入 Entity 物件即可。


public bool Insert(Product entity)
{
    return _mongoCollection.Insert(entity).Ok;
}

 

加入更新方法

更新直接呼叫 MongoCollection 類別提供的 Save 方法傳入 Entity 物件即可。


public bool Update(Product entity)
{
    return _mongoCollection.Save(entity).Ok;
}

 

加入刪除方法

刪除直接呼叫 MongoCollection 類別提供的 Remove 方法,同樣先建立 Query 物件傳入即可。


public bool DeleteById(string id)
{
    var query = Query.EQ(p => p.ID, id);
    return _mongoCollection.Remove(query).Ok;
}

 

當以上 CRUD 方法都建立完成後,就可以在 Page 頁面去呼叫使用,實際操作結果如下。

 

以上就是 MongoDB 基本的 CRUD 操作方法,實際應用上還有許多方法跟變化可以使用,日後將再繼續補充。

 

範例程式碼


TMongoDB_01.rar

 

參考資料


CSharp Language Center

Getting Started with the CSharp Driver

SQL to MongoDB Mapping Chart

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)