CRL快速开发框架系列教程十二(MongoDB支持)
2024-10-18 14:58:32
本系列目录
- 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新增的功能不被支持
最新文章
- LINQ找出重复和不重复的元素及linq OrderBy 方法 两个字段同时排序有关问题
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
- jQuery遮罩插件jQuery.blockUI.js简介
- 最简便的清空memcache的方法
- 国内静态文件CDN服务介绍 国内js公共库
- 重构技巧 引入Null对象
- Windows 8/8.1系统下硬盘占用率100%的问题解决思路汇总
- xml学习篇(一)
- Java EE (8) -- Java EE Patterns
- 用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)
- gitlab仓库迁移
- 菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章
- 练习markdown语法
- vue全家桶+Koa2开发笔记(6)--app开发
- Django服务器启动时指定端口和IP方法
- [EffectiveC++]item17:以独立语句将newed对象置入智能指针
- mysqli常用方法
- iOS 通过接受距离传感器的消息改变屏幕的明暗度(仅限用于真实的手机)
- EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:bootstrap弹窗功能的实现
- Unity3d Attribute 总结(转)
热门文章
- ABP入门系列(1)——学习Abp框架之实操演练
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
- 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
- App你真的需要么
- CRL快速开发框架系列教程九(导入/导出数据)
- zookeeper源码分析之四服务端(单机)处理请求流程
- Android -- 真正的 高仿微信 打开网页的进度条效果
- iOS开源项目周报1229
- [Hadoop in Action] 第7章 细则手册
- ubuntu-14.04-server配置Jexus --安装步骤记录