日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

MongoDB入门及 c# .netcore客户端MongoDB.Driver2.9.1使用

發布時間:2025/3/20 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB入门及 c# .netcore客户端MongoDB.Driver2.9.1使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。

什么場景下使用MongoDB

MongoDB雖然是NoSQL(非關系型的數據庫),但是實際使用的時候可以當做關系型數據庫來用,
mysql等數據庫中單表數據量大了之后,想要擴展字段就非常痛苦,應為要卡很長時間,這時候就必須面臨著兩種選擇 要么水平切分數據庫,要么使用nosql來存儲海量數據,mongodb作為日志存儲是非常利于擴展的,還有數據分析等都可以用mongodb作為靈活的數據源的存儲方式。

MongoDB 概念解析

在mongodb中基本的概念是文檔、集合、數據庫,下面我們挨個介紹。

SQL術語/概念MongoDB術語/概念解釋/說明
databasedatabase數據庫
tablecollection數據庫表/集合
rowdocument數據記錄行/文檔
columnfield數據字段/域
indexindex索引
table joins表連接,MongoDB不支持
primary keyprimary key主鍵,MongoDB自動將_id字段設置為主鍵

數據庫

一個mongodb中可以建立多個數據庫。
MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中。
MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。
"show dbs" 命令可以顯示所有數據的列表。

集合

集合就是 MongoDB 文檔組,類似于 RDBMS (關系數據庫管理系統:Relational Database Management System)中的表格。

集合存在于數據庫中,集合沒有固定的結構,這意味著你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有一定的關聯性。

比如,我們可以將以下不同數據結構的文檔插入到集合中:

{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.runoob.com","name":"菜鳥教程","num":5}
當第一個文檔插入時,集合就會被創建。

合法的集合名
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),這個字符表示集合名的結尾。
集合名不能以"system."開頭,這是為系統集合保留的前綴。
用戶創建的集合名字不能含有保留字符。有些驅動程序的確支持在集合名里面包含,這是因為某些系統生成的集合中包含該字符。除非你要訪問這種系統創建的集合,否則千萬不要在名字里出現$。 

文檔(Document)

文檔是一組鍵值(key-value)對(即 BSON)。MongoDB 的文檔不需要設置相同的字段,并且相同的字段不需要相同的數據類型,這與關系型數據庫有很大的區別,也是 MongoDB 非常突出的特點。

下表列出了 RDBMS 與 MongoDB 對應的術語:

RDBMSMongoDB
數據庫數據庫
表格集合
文檔
字段
表聯合嵌入文檔
主鍵主鍵 (MongoDB 提供了 key 為 _id )

需要注意的是:

文檔中的鍵/值對是有序的。
文檔中的值不僅可以是在雙引號里面的字符串,還可以是其他幾種數據類型(甚至可以是整個嵌入的文檔)。
MongoDB區分類型和大小寫。
MongoDB的文檔不能有重復的鍵。
文檔的鍵是字符串。除了少數例外情況,鍵可以使用任意UTF-8字符。
文檔鍵命名規范:

鍵不能含有\0 (空字符)。這個字符用來表示鍵的結尾。
.和$有特別的意義,只有在特定環境下才能使用。
以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。

MongoDB 數據類型

下表為MongoDB中常用的幾種數據類型。

數據類型描述
String字符串。存儲數據常用的數據類型。在 MongoDB 中,UTF-8 編碼的字符串才是合法的。
Integer整型數值。用于存儲數值。根據你所采用的服務器,可分為 32 位或 64 位。
Boolean布爾值。用于存儲布爾值(真/假)。
Double雙精度浮點值。用于存儲浮點值。
Min/Max keys將一個值與 BSON(二進制的 JSON)元素的最低值和最高值相對比。
Array用于將數組或列表或多個值存儲為一個鍵。
Timestamp時間戳。記錄文檔修改或添加的具體時間。
Object用于內嵌文檔。
Null用于創建空值。
Symbol符號。該數據類型基本上等同于字符串類型,但不同的是,它一般用于采用特殊符號類型的語言。
Date日期時間。用 UNIX 時間格式來存儲當前日期或時間。你可以指定自己的日期時間:創建 Date 對象,傳入年月日信息。
Object ID對象 ID。用于創建文檔的 ID。
Binary Data二進制數據。用于存儲二進制數據。
Code代碼類型。用于在文檔中存儲 JavaScript 代碼。
Regular expression正則表達式類型。用于存儲正則表達式。

ObjectId

ObjectId 類似唯一主鍵,可以很快的去生成和排序,包含 12 bytes,含義是:

  • 前 4 個字節表示創建?unix?時間戳,格林尼治時間?UTC?時間,比北京時間晚了 8 個小時
  • 接下來的 3 個字節是機器標識碼
  • 緊接的兩個字節由進程 id 組成 PID
  • 最后三個字節是隨機數

MongoDB 中存儲的文檔必須有一個 _id 鍵。這個鍵的值可以是任何類型的,默認是個 ObjectId 對象

mongodb windows安裝

下載地址 https://www.mongodb.com/download-center/community

客戶端工具
使用以下三種都可以
https://robomongo.org/download【推薦】
https://www.mongodb.com/download-center/compass【官方的,windows下會默認安裝】
https://nosqlbooster.com/downloads

如何使用

引入 nuget包 MongoDB.Driver

客戶端:

以下是常用的CRUD測試用例

using Microsoft.VisualStudio.TestTools.UnitTesting; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Driver; using MongoDB.Driver.Linq; using System; using System.Collections; using System.Collections.Generic; using System.Linq;namespace MongoDBDemo {/// <summary>/// mongodb先創建庫 test/// 再創建表 testlist/// </summary>[TestClass]public class UnitTest1{private MongoClient client;private IMongoDatabase database;public UnitTest1(){this.client = new MongoClient(new MongoClientSettings { Server = new MongoServerAddress("127.0.0.1", 27017), });this.database = client.GetDatabase("test");}/// <summary>/// 查所有記錄/// </summary>[TestMethod]public void TestQueryAll(){var list = database.GetCollection<A>("testlist");var result = list.Find("{}").ToList();}/// <summary>/// 基礎的查詢方式/// </summary>[TestMethod]public void TestQueryBase(){var collection = database.GetCollection<BsonDocument>("testlist");BsonDocument filter = new BsonDocument();var s = collection.Find(filter).ToList();using (var cursor = collection.FindAsync(filter).Result){while (cursor.MoveNextAsync().Result){var batch = cursor.Current;foreach (BsonDocument document in batch){Console.WriteLine(document.ToJson());}}}}/// <summary>/// 組裝查詢語句方式/// </summary>[TestMethod]public void TestQueryBuilders(){var list = database.GetCollection<A>("testlist");var filter = Builders<A>.Filter.Eq(x => x.Name, "b");var result = list.Find(filter).ToList();}/// <summary>/// linq asqueryable方式/// </summary>[TestMethod]public void TestQueryLinq(){var list = database.GetCollection<A>("testlist");var result = list.AsQueryable().Where(p => p.Name == "b").ToList();}[TestMethod]public void TestQueryLinq2(){var list = database.GetCollection<A>("testlist");var result = list.Find(p => p.Name == "b").ToList();}[TestMethod]public void TestInsert(){var list = database.GetCollection<A>("testlist");list.InsertOne(new A { Name = "a", Count = 1 });}[TestMethod]public void TestUpdate(){var list = database.GetCollection<A>("testlist");var update = Builders<A>.Update;list.UpdateOne(p => p.Name == "a", update.Set("Count", 2));}[TestMethod]public void TestDelete(){var list = database.GetCollection<A>("testlist");list.DeleteOne(p => p.Name == "s");}}//如果不加這個[BsonIgnoreExtraElements]會報錯 // System.FormatException:“Element '_id' does not match any field or property of class,// 也可以加屬性 public ObjectId _id { get; set; } 來解決[BsonIgnoreExtraElements]public class A{//public ObjectId _id { get; set; }public string Name { get; set; }public int Count { get; set; }} }

更詳細的關于CRUD操作可以看官方文檔

轉載于:https://www.cnblogs.com/sands/p/11528819.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的MongoDB入门及 c# .netcore客户端MongoDB.Driver2.9.1使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。