前言 你要開發一個系統,是不是首要任務是先建庫,建表,建欄位,既所謂的數據建模(聽起來高大上一點,數據建模也確實是個燒腦的活),要費不少功夫。 不知你是否遇到過這樣的場景。A產品有3個測試參數,B產品有6個測試參數,而且值和類型都各不相同,用SQL你要怎麼建表呢? 有人會說這簡單“參數名,參數值兩列 ...
前言
你要開發一個系統,是不是首要任務是先建庫,建表,建欄位,既所謂的數據建模(聽起來高大上一點,數據建模也確實是個燒腦的活),要費不少功夫。
不知你是否遇到過這樣的場景。A產品有3個測試參數,B產品有6個測試參數,而且值和類型都各不相同,用SQL你要怎麼建表呢?
有人會說這簡單“參數名,參數值兩列搞定”,NO!數據類型考慮了嗎,數據量考慮了嗎?
有人又說"每個參數建一列,A,B兩個產品共建9列用來存各自的值。",如果某天C產品又有9個參數呢,又去增加欄位?,你又說”item1,item2...N,多增加幾十個備用",有考慮過查詢嗎?有考慮過他人看到這樣的表不頭大嗎?
還有人說“一列JSON列搞定”,數據查詢和數據統計一樣把人折磨的不要不要的。
NOSQL的出現,讓你眼前一亮,上面的問題迎刃而解。建庫,建表,甚至建欄位都是很愉悅的事情,你傳入什麼數據,NOSQL就給你自動創建好,相應的資料庫和表(準確的說NoSQL的表叫數據集)。
同一個列可以有不同資料庫類型,某一列存單純的一個數字,還是一個對象都可以隨心所欲。
今天要介紹的就是嵌入式NOSQL資料庫,LiteDB,就是一個NOSQL版的SQLite。
LiteDB是嵌入式,跨平臺,純c#開發的輕量資料庫。詳情,請移步到https://www.litedb.org瞭解。
筆者使用LiteDB,掐指一算,已有6個年頭,雖然踩過不少坑,經歷過資料庫損壞的痛苦經歷,但依然沒有放棄它,還是愛不釋手,因為它在某些應用場景確實非常貼近我的需求。目前經歷過幾次版本迭代,功能也越來越完善。
現在切入正題
讓我一步一步帶你增刪改查。
安裝
Install-Package DbCRUD.LiteDB 安裝包
插入數據
插入對象數據到DB
var dic1 = new Dictionary<string, object>
{
{ "_id", 2 },
{ "Name", "n2" },
{ "Qty", 200},
//{ "DDate", DateTime.Now }
};
string dictable = "dicdata";
var result= testdb.Upsert(dictable, dic1);
插入JSON數據到DB
var dic1 = new Dictionary<string, object>
{
{ "Name", "n2" },
{ "Qty", 19},
//{ "DDate", DateTime.Now }
};
//非同步插入
string jsondata = JsonConvert.SerializeObject(dic1);
var result = await testdb.InsertAsync("jsondata", jsondata);
SQL命令插入,方便喜歡SQL語句的開發人員
testdb.Insert("insert Sqldata('name','date') value ('test','2023-04-16')");
批量插入
//插入列表
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
int maxid = testdb.Max<int>(dictable);
for (int i = 0; i < 10; i++)
{
maxid++;
var dic2 = new Dictionary<string, object>
{
{ "_id",maxid },
{ "Name", "n2" },
{ "Qty", 19},
{ "DDate", DateTime.Now }
};
listdata.Add(dic2);
}
var listResult= testdb.Insert(dictable, listdata);
更新數據
//更新部分欄位數據
var updata = new Dictionary<string, object>
{
{ "Name", "updatetest" },
{ "Qty", 300}
};
var upresult = testdb.UpDate(dictable, updata, "_id=2");
更新及插入數據(數據存在更新,不存在插入)
var dic1 = new Dictionary<string, object>
{
{ "_id", 2 },
{ "Name", "n2" },
{ "Qty", 200},
//{ "DDate", DateTime.Now }
};
string dictable = "dicdata";
var result= testdb.Upsert(dictable, dic1);
查詢數據
testdb.Find<Dictionary<string, object>>(dictable, "_id=2")
刪除數據
string dictable = "dicdata";
var result = testdb.Delete(dictable,2);
更多使用方法請移步到倉庫 https://gitee.com/lzcode/db-crud
做了就有可能!我的分享希望能給你帶去幫助,您的打賞是我繼續為您分享的動力。