C# MongoDb基本操作
前言
公司的資料庫,部份資料表過大,造成查詢效能低落。目前考慮要將較大的資料表及較不重要的Log檔,搬到MongoDB上,來解決效能瓶頸。
安裝
- 資料庫管理工具,用來執行備份、還原。
- 下載後,將相關exe放到安裝目錄內。
- Nuget C# MongoDB Driver : Install-Package mongocsharpdriver -Version 2.11.4
C# 新增、讀取、更新、刪除 (CRUD) 操作
安裝套件
Install-Package mongocsharpdriver -Version 2.11.4
初始化
private static void Init()
{
string connectionString = "mongodb://localhost"; // MongoDB 連線字串
_mongoClient = new MongoClient(connectionString);// 產生 MongoClient 物件
_mongoDatabase = _mongoClient.GetDatabase("Demo");// 取得 MongoDatabase 物件
_mongoCollectionProduct = _mongoDatabase.GetCollection<Product>("Product"); // 取得 Collection(可以視為資料表)
}
ps:資料庫及Collection可以不用事先建立,寫入時不存在,會自動建立。
新增
private static void Insert()
{
var products = Product.GetTestData();
_mongoCollectionProduct.InsertMany(products);//寫入多筆
var single = Product.GetTestData().First();
_mongoCollectionProduct.InsertOne(single);//寫入單筆
}
更新
private static void Update(Product product)
{
product.Name = "iPhone 12 X";
//取得資料後更新
_mongoCollectionProduct.ReplaceOne(o => o.Id == product.Id, product);
//直接更新
_mongoCollectionProduct.UpdateOne(Builders<Product>.Filter.Eq(i => i.Name, "iPhone 12 X"),
Builders<Product>.Update.Set(i => i.Brand, "Apple v2"));
}
刪除
private static void Delete()
{
_mongoCollectionProduct.DeleteOne(Builders<Product>.Filter.Eq(i => i.Name, "Pixel 3a"));
}
建立索引
private static void CreateIndex()
{
var notificationLogBuilder = Builders<Product>.IndexKeys;
//單鍵索引
var index = new CreateIndexModel<Product>(notificationLogBuilder.Ascending(x => x.Name));
_mongoCollectionProduct.Indexes.CreateOne(index);
//多鍵索引
var indexMultiple = new CreateIndexModel<Product>(notificationLogBuilder.Ascending(x => x.Name).Descending(o => o.Brand));
_mongoCollectionProduct.Indexes.CreateOne(indexMultiple);
}
測試
static IMongoClient _mongoClient;
static IMongoDatabase _mongoDatabase;
static IMongoCollection<Product> _mongoCollectionProduct;
static void Main(string[] args)
{
Init();
Insert();
CreateIndex();
var find = _mongoCollectionProduct.Find(o => o.Name == "iPhone 12").Single();
Update(find);
Delete();
}
備份還原
Backup
- -h 主機
- -d 資料庫
- -o 輸出位置
mongodump -h 127.0.0.1 -d Demo -o D:\Temp\MangodbData\Backup\
Resotre
- --drop 為先刪除現有資料,再進行還原。
- 若不下這個參數,會直接用新增方式寫入,若有重複會一直報錯。
mongorestore -h 127.0.0.1 -d Demo D:\Temp\MangodbData\Backup\Demo --drop
- 可以針對單一資料表(Collection)還原,指定到檔名即可
mongorestore -h 127.0.0.1 -d Demo D:\Temp\MangodbData\Backup\Demo\BARCODES_LOG.bson --drop
其他
- C:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg
- 組態設定,可以修改資料庫儲存的檔案位置
參考