[C#][NoSQL] 第一次 使用 C# 操控 MongoDB 就上手 (查詢資料)
上篇文章 第一次 使用 C# 操控 MongoDB 就上手 (新增資料篇) 已經把資料送進去了..
分別為 Name: Donma1~Donma100 還有 Age: 1~ 100的資料 ,我們才模擬幾種比較常見的查詢也可以看看MongoDB方便的地方..
1. 透過Id 進行查詢,回傳結果只有一筆
我們來看下MongoLab上面的資料..
其中它的Id 為 5011175615d1b20bd8448622 我們就先以這資料當作Sample 對 Users 這Collection進行搜尋出Donma1這筆資料
C# Code :
//MongoDB 的 Conection URL
var connectionString = "mongodb://user1:[email protected]:35167/sampledb";
//建立連線
var server = MongoServer.Create(connectionString);
//取得指定Database
var db = server.GetDatabase("sampledb");
//指定操作Collection 為 Users
MongoCollection<User> coll = db.GetCollection<User>("Users");
//建立查詢條件,查詢Id 為 5011175615d1b20bd8448622
var query = Query.EQ("_id", new BsonObjectId("5011175615d1b20bd8448622"));
//尋找一筆資料回來
var user = coll.FindOne(query);
//顯示
Response.Write("Name:" +user.Name + ","+"Age:"+user.Age+","+"Id:"+user.Id);
輸出結果:
Name:Donma1,Age:1,Id:5011175615d1b20bd8448622
資料正確,接下來我們來看看其他的搜尋..
2.透過關鍵字搜尋,回傳結果為多筆
因為資料Name 有 Donma1~Donma100
我們來搜尋出來 帶有 "onma1" 關鍵字的資料出來..
C# Code:
//MongoDB 的 Conection URL
var connectionString = "mongodb://user1:[email protected]:35167/sampledb";
//建立連線
var server = MongoServer.Create(connectionString);
//取得指定Database
var db = server.GetDatabase("sampledb");
//指定操作Collection 為 Users
MongoCollection<User> coll = db.GetCollection<User>("Users");
//只要Match 到 onma1 的都會出現
var query = Query.Matches("Name", new BsonRegularExpression("onma1"));
//搜尋所有解果回來
var all_user = coll.Find(query);
//顯示
foreach (var user in all_user)
{
Response.Write("Name:" + user.Name + " , " + "Age:" + user.Age + " , " + "Id:" + user.Id +"<br />");
}
結果:
Name:Donma1 , Age:1 , Id:5011175615d1b20bd8448622
Name:Donma10 , Age:10 , Id:5011175615d1b20bd844862b
Name:Donma11 , Age:11 , Id:5011175615d1b20bd844862c
Name:Donma12 , Age:12 , Id:5011175615d1b20bd844862d
Name:Donma13 , Age:13 , Id:5011175615d1b20bd844862e
Name:Donma14 , Age:14 , Id:5011175615d1b20bd844862f
Name:Donma15 , Age:15 , Id:5011175615d1b20bd8448630
Name:Donma16 , Age:16 , Id:5011175615d1b20bd8448631
Name:Donma17 , Age:17 , Id:5011175615d1b20bd8448632
Name:Donma18 , Age:18 , Id:5011175615d1b20bd8448633
Name:Donma19 , Age:19 , Id:5011175615d1b20bd8448634
Name:Donma100 , Age:100 , Id:5011175615d1b20bd8448685
結果沒錯 連Donma100 都有了..
3.透過Regular Expression 搜尋文字中的數字範圍
如果我想搜尋 Donma10~Donma20 呢..
這時候就要用到Regular Expression ..
C# Code :
//MongoDB 的 Conection URL
var connectionString = "mongodb://user1:[email protected]:35167/sampledb";
//建立連線
var server = MongoServer.Create(connectionString);
//取得指定Database
var db = server.GetDatabase("sampledb");
//指定操作Collection 為 Users
MongoCollection<User> coll = db.GetCollection<User>("Users");
//透過Regular Expression 1開頭 第二位數0~9且只能一位數,也包含20
var query = Query.Matches("Name", new BsonRegularExpression("Donma1([0-9]{1,1})$|20"));
//搜尋所有結果回來
var all_user = coll.Find(query);
//顯示
foreach (var user in all_user)
{
Response.Write("Name:" + user.Name + " , " + "Age:" + user.Age + " , " + "Id:" + user.Id + "<br />");
}
結果:
Name:Donma10 , Age:10 , Id:5011175615d1b20bd844862b
Name:Donma11 , Age:11 , Id:5011175615d1b20bd844862c
Name:Donma12 , Age:12 , Id:5011175615d1b20bd844862d
Name:Donma13 , Age:13 , Id:5011175615d1b20bd844862e
Name:Donma14 , Age:14 , Id:5011175615d1b20bd844862f
Name:Donma15 , Age:15 , Id:5011175615d1b20bd8448630
Name:Donma16 , Age:16 , Id:5011175615d1b20bd8448631
Name:Donma17 , Age:17 , Id:5011175615d1b20bd8448632
Name:Donma18 , Age:18 , Id:5011175615d1b20bd8448633
Name:Donma19 , Age:19 , Id:5011175615d1b20bd8448634
Name:Donma20 , Age:20 , Id:5011175615d1b20bd8448635
因為Name 並非 int 這種文字型態,不過他很方便地提供,可以透過Regular Expression 去搜尋…
我Regular Expression 沒有很熟,所以不是寫得很完美,我也測試了好久..QQ..
4.數值,範圍搜尋
其中資料的年齡為1~100 我們就對那欄位進行搜尋,搜尋此範圍10~20 的資料出來..
C# Code :
//MongoDB 的 Conection URI
var connectionString = "mongodb://user1:[email protected]:35167/sampledb";
//建立連線
var server = MongoServer.Create(connectionString);
//取得指定Database
var db = server.GetDatabase("sampledb");
//指定操作Collection 為 Users
MongoCollection<User> coll = db.GetCollection<User>("Users");
//搜尋資料 >=10 且<=20
var query = Query.And(Query.GTE("Age", 10), Query.LTE("Age", 20));
//搜尋所有結果回來
var all_user = coll.Find(query);
//顯示
foreach (var user in all_user)
{
Response.Write("Name:" + user.Name + " , " + "Age:" + user.Age + " , " + "Id:" + user.Id + "<br />");
}
結果:
Name:Donma10 , Age:10 , Id:5011175615d1b20bd844862b
Name:Donma11 , Age:11 , Id:5011175615d1b20bd844862c
Name:Donma12 , Age:12 , Id:5011175615d1b20bd844862d
Name:Donma13 , Age:13 , Id:5011175615d1b20bd844862e
Name:Donma14 , Age:14 , Id:5011175615d1b20bd844862f
Name:Donma15 , Age:15 , Id:5011175615d1b20bd8448630
Name:Donma16 , Age:16 , Id:5011175615d1b20bd8448631
Name:Donma17 , Age:17 , Id:5011175615d1b20bd8448632
Name:Donma18 , Age:18 , Id:5011175615d1b20bd8448633
Name:Donma19 , Age:19 , Id:5011175615d1b20bd8448634
Name:Donma20 , Age:20 , Id:5011175615d1b20bd8448635
GTE 代表為 最小起始值且包含 如果是 GT 就是不包含
LTE 代表為 最大值且包含 如果是LT就是不包含..
這部分有機會再聊聊…
以上,用簡單的的資料範例,來介紹搜尋情形,當然以後有機會再寫比較複雜的搜尋介紹..