C#簡單操作MongoDB的步驟全紀錄
前言
MongoDB是一款由C++編寫的高性能、開源、無模式的常用非關(guān)系型數(shù)據(jù)庫產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當中功能最豐富、最像關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫。它擴展了關(guān)系型數(shù)據(jù)庫的眾多功能,例如:輔助索引、范圍查詢、排序等。
MongoDB主要解決的是海量數(shù)據(jù)的訪問效率問題,它作為分布式數(shù)據(jù)崛起后,使用較多的一款非結(jié)構(gòu)數(shù)據(jù)庫,必然有其值得稱道之處,它的主要功能特性如下:
1)面向集合的存儲,適合存儲對象及JSON形式的數(shù)據(jù)。
2)動態(tài)查詢,MongoDB支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。
3)完整的索引支持,包括文檔內(nèi)嵌對象及數(shù)組。MongoDB的查詢優(yōu)化器會分析查詢表達式,并生成一個高效的查詢計劃。
4)查詢監(jiān)視,MongoDB包含一個監(jiān)視工具用于分析數(shù)據(jù)庫操作的性能。
5)復(fù)制及自動故障轉(zhuǎn)移,MongoDB數(shù)據(jù)庫支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。復(fù)制的主要目標是提供冗余及自動故障轉(zhuǎn)移。
6)高效的傳統(tǒng)存儲方式,支持二進制數(shù)據(jù)及大型對象(如圖片或視頻)。
7)自動分片以支持云級別的伸縮性,自動分片功能支持水平的數(shù)據(jù)庫集群,可動態(tài)添加額外的機器。
本文主要給大家介紹了關(guān)于C#操作MongoDB的相關(guān)內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
一 安裝MongoDB
官網(wǎng)按需下載, 安裝, 一步到位.
二 VS創(chuàng)建新項目
創(chuàng)建一個.netcore console項目, 然后nuget安裝驅(qū)動MongoDB.Driver
三 建立連接
在Program.Main函數(shù)中添加代碼
var client = new MongoClient("mongodb://127.0.0.1:27017");
var database = client.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");
三個對象, client是連接數(shù)據(jù)庫的客戶端, database對應(yīng)庫, collection是對象集合.
對對象的操作是爭對collection來的.
四 操作
1> 插入
var document = new BsonDocument
{
{ "name", "測試數(shù)據(jù)1" },
{ "type", "大類" },
{ "number", 5 },
{ "info", new BsonDocument
{
{ "x", 111 },
{ "y", 222 }
}}
};
collection.InsertOne(document);
同理還有InsertMany() , 鑒于VS高超的智能提示, 一目了然.
2> 查找
上一步插入之后, 通過find將它查找出來
find()需要一個filter參數(shù), 根據(jù)條件查詢
collection.Find(Builders<BsonDocument>.Filter.Empty);
上述表示無條件查詢, matches everything.
如果有條件的話, 可以從Builders<BsonDocument>.Filter中選擇, 比如Eq為相等, Lt為小于, Gt大于...顧名思義. 基于VS強大的智能提示, 非常清晰.
舉例條件查詢:
collection.Find(Builders<BsonDocument>.Filter.Eq("name", "測試數(shù)據(jù)1") & Builders<BsonDocument>.Filter.Lt("number", 6));
多項條件之間的與或關(guān)系, 對應(yīng)使用&和|符號
3> 更新
collection.UpdateMany(Builders<BsonDocument>.Filter.Eq("name", "測試數(shù)據(jù)1"), Builders<BsonDocument>.Update.Set("number", 6));
更新使用UpdateMany(), 同樣支持條件從Builders<BsonDocument>.Filter中獲取.
更新支持添加新的field, 如:
collection.UpdateMany(Builders<BsonDocument>.Filter.Eq("name", "測試數(shù)據(jù)1"), Builders<BsonDocument>.Update.Set("number2", 666));
4> 刪除
collection.DeleteMany()
其他幾個API大同小異
五 BsonDocument到自定義class Object的相互轉(zhuǎn)換
不要引入Json.Net(Newtonsoft.Json)
1> 自定義類型到BsonDocument
擴展函數(shù):
entity.ToBsonDocument()
2> BsonDocument到自定義類型
通常是在Find的時候吧, IFindFluent.As<TEntity>()轉(zhuǎn)就可以了.
var result = collection
.Find((Builders<BsonDocument>.Filter.Lt("number",999) & Builders<BsonDocument>.Filter.Gt("number", 110)) & Builders<BsonDocument>.Filter.Eq("name", "測試數(shù)據(jù)1")) .OrderBy(x=>x["number"])//排序
.Skip(10)//跳過
.Limit(10)//限制 .As<Bar>()//m=>o
.ToList();//像極了Linq吧?
如果不是呢?
var entity = BsonSerializer.Deserialize<Bar>(bson);
用到的自定義class大概長這樣:
public class Bar
{
public ObjectId _id { get; set; }
public string name { get; set; }
public string type { get; set; }
public int number { get; set; }
public int number2 { get; set; }
public BarInfo info { get; set; }
public class BarInfo
{
public int x { get; set; }
public int y { get; set; }
}
}
小感想:
mongodb對程序員是極友好的, 可以動態(tài)變化的結(jié)構(gòu), 讓程序員不再害怕頻繁變動的需求.
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
C# double和decimal數(shù)據(jù)類型以截斷的方式保留指定的小數(shù)位數(shù)
從事ASP.NET in C#開發(fā)快一年了,今天才知道,C#中保留小數(shù)位數(shù)時沒有使用截斷的方式2012-05-05
Unity UGUI實現(xiàn)滑動翻頁直接跳轉(zhuǎn)頁數(shù)
這篇文章主要為大家詳細介紹了Unity UGUI實現(xiàn)滑動翻頁,直接跳轉(zhuǎn)頁數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04
詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+Object
這篇文章主要介紹了ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
C# Double轉(zhuǎn)化為String時的保留位數(shù)及格式方式
這篇文章主要介紹了C# Double轉(zhuǎn)化為String時的保留位數(shù)及格式方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

