小卷的胡言亂語

隨心。隨興。隨喜。隨緣



使用c#連接mongodb雲端資料庫 - (三)資料查詢

上篇,本篇主要紀錄c#連接mongodb,對資料庫的查詢

  • 本篇使用的MongoDB.Driver版本為2.5。
  • 範例db名稱:testmean
  • 範例collection名稱:categories、products
  • 本範例僅紀錄同步,若有使用非同步需求,請見官方手冊說明

1、準備


請參考先前兩篇文章:
mlab註冊&下載driver:使用c#連接mongodb雲端資料庫 - (一)簡介
專案設定mongodb連線&資料新增:使用c#連接mongodb雲端資料庫 - (二)連接資料庫與資料新增

2、取得所有資料


var collection = db.GetCollection<BsonDocument>("categories"); //指定對collection"categories"操作  
var documents = collection.Find(new BsonDocument()).ToList(); //取出資料轉list  

3、以特定條件查詢


已知某欄位值,取出對應完整資料

var collection = db.GetCollection<BsonDocument>("categories"); //指定對collection"categories"操作  
var Filter = new BsonDocument("name", "cabintest");  //設定過濾條件  
var document = collection.Find(Filter).ToList();  //取出資料轉list  
//var document = collection.Find(Filter).FirstOrDefault();  //or取單筆時

取得符合範圍條件資料

這裡我們先寫入數筆products資料:
(1)mongodb建立collection-products、並設定user權限
(請參考系列文:使用c#連接mongodb雲端資料庫 - (一)簡介)
(2)專案內建立物件

[BsonIgnoreExtraElements]  
public class Product  
{
    [BsonId]  
    public ObjectId Id { get; set; }  
    
    [BsonElement("name")]  
    public string name { get; set; }  
    
    [BsonElement("price")]  
    public int price { get; set; }
}

(3)專案內寫入數筆products
(請參考系列文:使用c#連接mongodb雲端資料庫 - (二)連接資料庫與資料新增))

var coll = db.GetCollection<Product>("products");  
List<Product> data = new List<Product>();  
data.Add(new Product { name = "cabin1", price = 100 });  
data.Add(new Product { name = "cabin2", price = 550 });  
data.Add(new Product { name = "cabin3", price = 900 });   
coll.InsertMany(data);

(4)查詢資料

string result1 = string.Empty;
var collection = db.GetCollection<BsonDocument>("products");
//one condition : price > 800
var filter1 = Builders<BsonDocument>.Filter.Gt("price", 800);
var cursor1 = collection.Find(filter1).ToCursor();
foreach (var document in cursor1.ToEnumerable())
{
    //Console.WriteLine(document);
    result1 += document.ToJson();
}

//price > 500 & price <900
string result2 = string.Empty;
var filterBuilder = Builders<BsonDocument>.Filter;
var filter2 = filterBuilder.Gt("price", 500) & filterBuilder.Lte("price", 900);

var cursor2 = collection.Find(filter2).ToCursor();
foreach (var document in cursor2.ToEnumerable())
{
    //Console.WriteLine(document);
    result2 += document.ToJson();
}

搭配LINQ語法查詢

var collection = db.GetCollection<Product>("products");
var query = collection.AsQueryable().Where(x => x.name == "cabin1").ToList();
/*var query = from p in collection.AsQueryable()
              where p.name == "cabin1"
              select p;                        
*/

下一篇紀錄資料更新~

相關文章:
使用c#連接mongodb雲端資料庫 - (一)簡介
使用c#連接mongodb雲端資料庫 - (二)連接資料庫與資料新增