您好,登錄后才能下訂單哦!
使用C#怎么操作MongoDB數(shù)據(jù)庫(kù),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
前言
MongoDB是一款由C++編寫的高性能、開(kāi)源、無(wú)模式的常用非關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富、最像關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)。它擴(kuò)展了關(guān)系型數(shù)據(jù)庫(kù)的眾多功能,例如:輔助索引、范圍查詢、排序等。
MongoDB主要解決的是海量數(shù)據(jù)的訪問(wèn)效率問(wèn)題,它作為分布式數(shù)據(jù)崛起后,使用較多的一款非結(jié)構(gòu)數(shù)據(jù)庫(kù),必然有其值得稱道之處,它的主要功能特性如下:
1)面向集合的存儲(chǔ),適合存儲(chǔ)對(duì)象及JSON形式的數(shù)據(jù)。
2)動(dòng)態(tài)查詢,MongoDB支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。
3)完整的索引支持,包括文檔內(nèi)嵌對(duì)象及數(shù)組。MongoDB的查詢優(yōu)化器會(huì)分析查詢表達(dá)式,并生成一個(gè)高效的查詢計(jì)劃。
4)查詢監(jiān)視,MongoDB包含一個(gè)監(jiān)視工具用于分析數(shù)據(jù)庫(kù)操作的性能。
5)復(fù)制及自動(dòng)故障轉(zhuǎn)移,MongoDB數(shù)據(jù)庫(kù)支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。復(fù)制的主要目標(biāo)是提供冗余及自動(dòng)故障轉(zhuǎn)移。
6)高效的傳統(tǒng)存儲(chǔ)方式,支持二進(jìn)制數(shù)據(jù)及大型對(duì)象(如圖片或視頻)。
7)自動(dòng)分片以支持云級(jí)別的伸縮性,自動(dòng)分片功能支持水平的數(shù)據(jù)庫(kù)集群,可動(dòng)態(tài)添加額外的機(jī)器。
本文主要給大家介紹了關(guān)于C#操作MongoDB的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
一 安裝MongoDB
二 VS創(chuàng)建新項(xiàng)目
創(chuàng)建一個(gè).netcore console項(xiàng)目, 然后nuget安裝驅(qū)動(dòng)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");
三個(gè)對(duì)象, client是連接數(shù)據(jù)庫(kù)的客戶端, database對(duì)應(yīng)庫(kù), collection是對(duì)象集合.
對(duì)對(duì)象的操作是爭(zhēng)對(duì)collection來(lái)的.
四 操作
1> 插入
var document = new BsonDocument { { "name", "測(cè)試數(shù)據(jù)1" }, { "type", "大類" }, { "number", 5 }, { "info", new BsonDocument { { "x", 111 }, { "y", 222 } }} }; collection.InsertOne(document);
同理還有InsertMany()
, 鑒于VS高超的智能提示, 一目了然.
2> 查找
上一步插入之后, 通過(guò)find將它查找出來(lái)
find()需要一個(gè)filter參數(shù), 根據(jù)條件查詢
collection.Find(Builders<BsonDocument>.Filter.Empty);
上述表示無(wú)條件查詢, matches everything.
如果有條件的話, 可以從Builders<BsonDocument>.Filter
中選擇, 比如Eq為相等, Lt為小于, Gt大于...顧名思義. 基于VS強(qiáng)大的智能提示, 非常清晰.
舉例條件查詢:
collection.Find(Builders<BsonDocument>.Filter.Eq("name", "測(cè)試數(shù)據(jù)1") & Builders<BsonDocument>.Filter.Lt("number", 6));
多項(xiàng)條件之間的與或關(guān)系, 對(duì)應(yīng)使用&和|符號(hào)
3> 更新
collection.UpdateMany(Builders<BsonDocument>.Filter.Eq("name", "測(cè)試數(shù)據(jù)1"), Builders<BsonDocument>.Update.Set("number", 6));
更新使用UpdateMany(), 同樣支持條件從Builders<BsonDocument>.Filter
中獲取.
更新支持添加新的field, 如:
collection.UpdateMany(Builders<BsonDocument>.Filter.Eq("name", "測(cè)試數(shù)據(jù)1"), Builders<BsonDocument>.Update.Set("number2", 666));
4> 刪除
collection.DeleteMany()
其他幾個(gè)API大同小異
五 BsonDocument到自定義class Object的相互轉(zhuǎn)換
不要引入Json.Net(Newtonsoft.Json)
1> 自定義類型到BsonDocument
擴(kuò)展函數(shù):
entity.ToBsonDocument()
2> BsonDocument到自定義類型
通常是在Find的時(shí)候吧, 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", "測(cè)試數(shù)據(jù)1")) .OrderBy(x=>x["number"])//排序 .Skip(10)//跳過(guò) .Limit(10)//限制 .As<Bar>()//m=>o .ToList();//像極了Linq吧?
如果不是呢?
var entity = BsonSerializer.Deserialize<Bar>(bson);
用到的自定義class大概長(zhǎng)這樣:
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; } } }
關(guān)于使用C#怎么操作MongoDB數(shù)據(jù)庫(kù)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。