MongoDB for C#基礎入門
筆者這裡採用的是mongoDB官網推薦使用.net驅動:
http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_tour
有關於MongoDB的安裝讀者可以參考其他的部落格,對於基本的學習來說並不需要進行過多的配置。
建立連線
這一步驟跟ADO.NET連線到資料庫的步驟是一樣的,ADO.NET是利用SqlConnection連線資料庫,而MongoDB則使用MongoClient連線,並在建構函式中將連線字元傳遞進去,當然可以不傳遞,那麼預設就是連線本地的計算機的預設埠(27017),比如下面的三種連線方式:
var client = new MongoClient(); var client1 = new MongoClient("mongodb://localhost:27017"); var client2 = new MongoClient("mongodb://localhost:27017,localhost:27018,localhost:27019");
獲取資料庫
為了獲取資料庫,只需要呼叫MongoClient物件的GetDatabase方法,並傳入資料庫名稱即可,如果資料庫存在則直接返回,否則就建立該資料庫並返回,比如下面的這段程式碼將建立名為“foo”的資料庫:
var database = client.GetDatabase("foo");
現在database變數就指向了foo資料庫了。
獲取連結串列
雖然叫獲取連結串列,但是實際上就是獲取資料庫中的表,我們可以通過上面database的GetCollection<TDocument>方法獲取,比如下面的程式碼我們將獲取一個名為“bar”的表:
var collection = database.GetCollection<BsonDocument>("bar");
我們傳入的泛型引數為BsonDocument,這個是自帶的,可以動態的容納各種格式的資料,當然這裡還是建議讀者使用POCO。
插入一個文件
利用collection物件,我們可以將文件插入其中,比如下面的json格式資料:
{ "name": "MongoDB", "type": "database", "count": 1, "info": { x: 203, y: 102 } }
下面我們利用BsonDocument物件組織上面的JSON格式的資料:
var document = new BsonDocument { {"name","MongoDB"}, {"type","Database"}, {"count",1}, {"info",new BsonDocument{ {"x",203}, {"y",102} } } };
然後我們利用collection物件的InsertOneAsync將上面的資料插入其中:
collection.InsertOneAsync(doc);
我們都知道Async為字尾的方法都是支援非同步的,但是筆者是在控制檯專案中演示的所以沒有加上這個await,如果讀者實在其他的環境中測試的可以根據情況加上。
插入多個文件
如果需要一次性插入多個文件,我們可以通過InsertManyAsync方法,比如下面的示例我們將插入100條資料:
var documents = Enumerable.Range(0, 100).Select(x => new BsonDocument("counter", x)); collection.InsertManyAsync(documents);
統計文件數量
通過上面的步驟我們已經插入了101條資料,如果在實際開發中我們需要統計資料的數量就可以通過呼叫CountAsync方法,比如下面的程式碼:
var count = collection.CountAsync(new BsonDocument()); Console.WriteLine(count.Result);
查詢連結串列
利用Find方法我們可以對連結串列進行查詢,Find方法將返回給我們IFindFluent<TDocument,TProjection>物件,該介面屬於鏈式介面,所以能夠提供給我們類似jquery那樣的鏈式變成方式去控制查詢操作。
查詢連結串列首條資料
為了獲取第一條資料我們可以通過呼叫FirstOrDefaultAsync方法,該方法會返回第一條資料,如果不存在資料則會返回null,比如下面的程式碼將會顯示連結串列中的第一條資料:
var firstDoc = collection.Find(new BsonDocument()).FirstOrDefaultAsync(); Console.WriteLine(firstDoc.Result.ToString());
如果讀者注意最後的輸出,會發現一個_id欄位,但是我們並沒有插入這個欄位,這個欄位是mongoDB自動加入的,相信很多人都知道它的作用,這裡就不詳細解釋額。
查詢連結串列中所有資料
如果想將連結串列中所有的資料都返回可以在Find操作之後呼叫ToListAsync方法就可以,將會直接返回List<T>型別的結果,比如下面的這段程式碼:
var documents = collection.Find(new BsonDocument()).ToListAsync().Result;
針對數量較少的資料情況下,上面這種方式是沒有問題,但如果我們需要處理大量的資料,那麼我們就不能使用上面的這種方式,就需要利用下面的方式,通過ForEachAsync來完成,因為這個方法會在每條資料返回的時候執行一個回撥,從而達到併發處理的目的,比如下面這段程式碼就演示瞭如何使用:
collection.Find(new BsonDocument()).ForEachAsync(x => Console.WriteLine(x));
通過條件查詢單條資料
我們可以在呼叫Find方法的時候傳入一個過濾條件,從而在連結串列中查詢我們希望的資料,比如下面這個例子我們將查詢欄位“counter”的值為71的資料:
var filter = Builders<BsonDocument>.Filter.Eq("counter", 71); var document = collection.Find(filter).FirstAsync().Result; Console.WriteLine(document);
這裡我們需要通過Builders的靜態物件Filter中的各種條件方法來構造條件,然後在呼叫Find方法的將其傳入即可。
通過條件查詢多條資料
我們也可以獲取多條資料,比如下面這個例子,我們將搜尋出所有“counter”的值大於50的資料:
var filter = Builders<BsonDocument>.Filter.Gt("counter", 50); var document = collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));
當然我們也可以給定一個範圍,比如50到70之間:
var filterBuilder = Builders<BsonDocument>.Filter; var filter = filterBuilder.Gt("counter", 50) & filterBuilder.Lt("counter", 70); collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));
對資料排序
下面我們將在查詢的基礎之上加上排序,排序只需要在在呼叫Sort方法時傳入對應的引數即可,比如下面的例子,我們將對連結串列先進行查詢,然後排序:
var filter = Builders<BsonDocument>.Filter.Exists("counter"); var sort = Builders<BsonDocument>.Sort.Descending("counter"); var documnt = collection.Find(filter).Sort(sort).FirstAsync().Result;
對欄位投射
許多時候我們並不需要文件中的所有資料,這就好比在SQL中我們都會只把我們需要的資料select出來,而不會把表中的所有欄位的資料都拿出來,自然MongoDB也可以讓我這樣做,我們只需要跟過濾和排序一樣利用Projection構造器來構造然後傳遞給Project方法中就可以了,下面這個例子中我們將排除“_id”欄位:
var projection = Builders<BsonDocument>.Projection.Exclude("_id"); var document = collection.Find(new BsonDocument()).Project(projection).FirstAsync().Result; Console.WriteLine(document);
更新文件
MongoDB擁有很多更新操作,下面我們將會介紹幾個簡單的並且常用的更新操作。
如果我們需要更新一個物件(如果條件不匹配那麼可能是0條),可以使用UpdateOneAsync方法,並執行過濾條件和需要更新到的文件,比如下面我們將“counter”為1的資料中的“counter”更新為110:
var filter = Builders<BsonDocument>.Filter.Eq("counter", 1); var updated = Builders<BsonDocument>.Update.Set("counter", 110); var result = collection.UpdateOneAsync(filter, updated).Result;
如果我們需要批量的更新,我們可以呼叫UpdateManyAsync即可。比如我們需要將“counter”小於10的資料中的“counter”累加100,那麼我們就可以像下面這樣來寫:
var filter = Builders<BsonDocument>.Filter.Lt("counter", 10); var updated = Builders<BsonDocument>.Update.Inc("counter", 100); var result = collection.UpdateManyAsync(filter, updated).Result;
刪除文件
作為基礎部分這也是最後一個部分了,利用上面的過濾,然後呼叫DeleteOneAsync或DeleteManyAsync方法就可以了,比如下面的列子就是刪除“counter”大於100的所有資料:
var filter = Builders<BsonDocument>.Filter.Gt("counter", 100); var resut = collection.DeleteManyAsync(filter).Result;
到此為止,MongoDB的基礎部分就結束了。
相關文章
- mongodb基礎入門MongoDB
- MongoDB入門系列(一):基礎概念和安裝MongoDB
- C#程式設計基礎入門教程pdfC#程式設計
- C#零基礎小白快速入門指導C#
- 使用 C# 入門深度學習:Pytorch 基礎C#深度學習PyTorch
- 分散式文件儲存資料庫之MongoDB基礎入門分散式資料庫MongoDB
- C#語法——反射,架構師的入門基礎。C#反射架構
- RabbitMQ基礎入門MQ
- MySQL 基礎入門MySql
- ZooKeeper 基礎入門
- Elasticsearch 基礎入門Elasticsearch
- Vim 入門:基礎
- Bootstrap基礎入門boot
- Html基礎入門HTML
- ElasticSearch基礎入門Elasticsearch
- HTML 基礎入門HTML
- Dart 基礎入門Dart
- SQL入門基礎SQL
- Nginx 基礎入門Nginx
- Kafka基礎入門Kafka
- Redis入門基礎Redis
- Java 入門基礎Java
- Maven入門基礎Maven
- JavaScript入門基礎JavaScript
- SQL基礎入門SQL
- Zookeeper基礎入門
- goalng 基礎入門Go
- TypeScript 基礎入門TypeScript
- Mongoose基礎入門Go
- systemtap基礎入門
- sqlServer 基礎入門SQLServer
- 【FastAPI】入門基礎ASTAPI
- shell入門基礎
- go基礎入門Go
- 前端基礎入門四(JavaScript基礎)前端JavaScript
- MongoDB入門MongoDB
- c#基礎入門(6)——File、FileStream、StreamReader、StreamWriter詳解C#
- React Hooks入門: 基礎ReactHook