ASP.NET Core play with MongoDB and MongoDB .NET Driver - Create and Delete

針對MongoDB的Create(Insert)與Delete(Remove)進行介紹並應用MongoDB .NET Driver實作

關於專案環境請先下面兩篇文章

MongoDB Data Model Overview

首先先看一下MongoDB的資料架構

mongo_data

Database

MongoDB中的每一個 databases 可以保存多個 collections. 而我們也可以指派設定相同或不同的user給予database存取的權限作為管理.

Collection and Documents

MongoDB 將每一個資料記錄透過 BSON 的格式做文件(document)儲存在指定的collection中

Compare with RMDB

這邊我們對比一下關連式資料庫的觀念:

RMDB_MongoDB

MongoDB Write Operation Overview

在MongoDB中, 針對單一文件(single document)的寫入操作(write operation) 是處於基元((atomic)的狀態.
而atomic可以視為一種保護機制,基本上來講,是防止在寫未完成的時候被另外一個程序(thread)讀取而造成數據錯誤。

寫入操作(write operation)包含:

  • 新增(Insert)
  • 修改(Update)
  • 刪除(Remove)

MongoDB Insert

crud-annotated-mongodb-insert

MongoDB的 db.collection.insert() 那幫我們在指定collection中新增一份document.

新增資料到MongoDB中,每筆record都會自動產生一個_id的參數(文字格式),這是系統產生的唯一值,是在做查詢與交易時最佳的遍尋值.而這個在MongoDB .NET Driver當中是特別指定欄位為ObjectId這個class.

Basic Insert

1
2
3
4
public void Insert(Member dataObject)
{
this.Collection.InsertOne(dataObject);
}

MongoDB Remove

crud-annotated-mongodb-remove

這邊稍微注意一下,由於MongoDB針對Update與Delete提供一樣的條件參數(criteria或 conditions)與表態式(syntax),如果有不懂的需要確認可以參考read operations

而預設MongoDB的 db.collection.remove() 行為則是移除所有符合條件的資料紀錄.

1
2
3
4
5
6
7
8
9
10
11
12
public DeleteResult Delete(string id)
{
var filter = this.GenerateFilterInput(id);
var result = this.Collection.DeleteOne(filter);

return result;
}

private FilterDefinition<Member> GenerateFilterInput(string id)
{
return Builders<Member>.Filter.Eq("_id", ObjectId.Parse(id));
}

[補充] Member.CS

因為之後的新增, 查詢, 更新與刪除都會帶到這個class所以這邊在特別拿出來看一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace MongoCRUD.Core.Pocos
{
public class Member
{
public ObjectId Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("balance")]
public decimal Balance { get; set; }
}
}

References