本系列目錄
- CRL快速開發框架系列教程一(Code First數據表不需再關心)
- CRL快速開發框架系列教程二(基於Lambda表達式查詢)
- CRL快速開發框架系列教程三(更新數據)
- CRL快速開發框架系列教程四(刪除數據)
- CRL快速開發框架系列教程五(使用緩存)
- CRL快速開發框架系列教程六(分布式緩存解決方案)
- CRL快速開發框架系列教程七(使用事務)
- CRL快速開發框架系列教程八(使用CRL.Package)
- CRL快速開發框架系列教程九(導入/導出數據)
- CRL快速開發框架系列教程十(導出對象結構)
- CRL快速開發框架系列教程十一(大數據分庫分表解決方案)
- CRL快速開發框架系列教程十二(MongoDB支持)
- CRL快速開發框架系列教程十三(嵌套查詢)
正文
因為MongoDB查詢速度快,又有查詢語法支持,做一些快速查詢還是蠻方便的,但是調用它,又得重寫查詢實現
太麻煩,CRL來統一管理,和關系型數據庫一樣查詢了
此功能依賴MongoDB官方驅動MongoDB.Driver
簡單示例
對象定義MongoDBModel.cs
public class MongoDBModel:CRL.IModel { public MongoDBModel() { //保持唯一 Id = new Guid(); } public Guid Id { get; set; } public string OrderId { get; set; } public int Status { get; set; } }
管理類實現MongoDBTestManage
public class MongoDBTestManage : CRL.BaseProvider<MongoDBModel> { public static MongoDBTestManage Instance { get { return new MongoDBTestManage(); } } }
數據連接創建
CRL.SettingConfig.GetDbAccess = (dbLocation) =>
{
//可按type區分數據庫
var type2 = dbLocation.ManageType; if (type2 == typeof(Code.MongoDBTestManage)) { //實現MongoDB連接 return new CoreHelper.MongoDBHelper("mongodb://localhost:27017", "test2"); } return WebTest.Code.LocalSqlHelper.TestConnection; };
創建訪問對象
var instance = Code.MongoDBTestManage.Instance;
插入數據
instance.Add(new Code.MongoDBModel() { OrderId = "1212", Status = DateTime.Now.Second });
函數Count統計
int count = instance.Count(b => b.Status >= 0);
Group
var query = instance.GetLambdaQuery(); //group query.GroupBy(b => b.OrderId).Select(b => new { count = b.Status.SUM(), count2 = b.Status.COUNT() }); var list = query.ToDynamic(); foreach (var item in list) { var a = item.count; var key = item.OrderId; }
標准查詢
除了代表SQL特性的語法和函數不支持,其它都支持
var query2 = instance.GetLambdaQuery(); query2.Select(b => new { aa = b.Id, bb = b.Status }); query2.Where(b=>b.Status.In(1,2,3,4)&&b.OrderId.StartsWith("123"));//支持擴展方法 var result = query2.ToDictionary<Guid, int>();//返回字典 var result2 = query2.ToDynamic();//返回動態對象 var result3 = query2.ToList();//返回List<MongoDBModel>
更新刪除和之前調用方式保持一致
由於MongoDB的特性,以下不能實現,調用可能會拋出異常
- 關聯查詢
- 關聯刪除
- 關聯更新
- SQL語句查詢
- 事務
- 存儲過程
- 自動編譯
- 部份SQL函數
由於驅動的問題,匿名對象結果沒法實現,4.2新增的功能不被支持