回到目录

我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象尽而远之,这是正常的,人都是喜欢懒惰的,就像程序员,也是一样,喜欢偷懒,可能说,偷懒是程序员进步的一个标志,呵呵.

下面我是总结的几种标准的操作,主要是针对我封装的官方驱动而方的(MongoOfficialRepository<TEntity>)

1  插入对象和子对象

        /// <summary>
/// 添加对象
/// </summary>
static public void Insert()
{
List<Person> list = new List<Person>();
for (int i = ; i < ; i++)
{
//添加新对象 list.Add(new Person
{
Address = new Address
{
City = "北京",
District = "鸾翔凤集",
Province = "luanxian",
},
AddList = new List<Address>
{
new Address
{
Seconds=,
City = "湖北",
District = "鸾翔凤集",
Province = "luanxian",
},
new Address
{
Seconds=,
City = "湖南",
District = "小区",
Province = "luanxian",
}
},
Age = ,
Birthday = DateTime.Now,
LastContact = DateTime.Now,
Name = "wangwu"
});
}
repository1.Insert(list);
}

2 更新对象和子对象集合元素,这是非常不错的功能,对于没有必要更新的记录,可以不去为它赋值

        /// <summary>
/// 集合查询
/// </summary>
static public void Update()
{
repository1.Update<Person>(i => new Person
{
Id = "556bfd1b2683c82060c2edd0",
AddList = new List<Address>
{
new Address
{
Id = "556bfd1b2683c82060c2edd3",
City = "占占大师123",
District = "鸾翔凤集",
Seconds=
}
}
});
}

3 分页,多字段查询和排序,这是项目开发中用的最多的东西了,写了个标准的给大家参考

        /// <summary>
/// 分页,排序,查询
/// </summary>
static public void Select()
{
//排序和检索
var m1 = repository1.GetModel(new
{
Address = new
{
City = "北京"
},
AddList = new
{
Seconds =
}
}, new { Name = OrderType.Desc }, , );

4 分组,对于需要按着按些字段进行聚合(统计,求和,总数,最大值,最小值等),及多条件查询,这里有不错的实例

        /// <summary>
/// 分组
/// </summary>
static public PagedList<Person> Group(string keyword, int? age, int page)
{
Specification<Person> spec = new TrueSpecification<Person>(); //过滤
if (!string.IsNullOrWhiteSpace(keyword))
{
spec &= new DirectSpecification<Person>(i => i.Name == keyword);
} if (age.HasValue)
{
spec &= new DirectSpecification<Person>(i => i.Age == age);
} //分组
var linq = from data1 in repository1.GetModel().Where(spec.SatisfiedBy())
group data1 by new
{
data1.Id,
data1.Name
} into g
select new Person
{
Id = g.Key.Id,
Name = g.Key.Name,
Total = new Total
{
Count = g.Count(),
Max = g.Max(i => i.Age),
} };
return new PagedList<Person>(linq, page, );
}

OK,以上是针对我的MongoDB仓储进行的一些二次说明,感觉还是比较有必要的,呵呵.

回到目录

MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)的更多相关文章

  1. MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

    回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...

  2. MongoDB学习(1)--安装,基本curd操作

    知识点: 1-MongoDB 安装,启动和卸载 2-基本概念 3-基本的增删改查操作(CURD) 来回顾总结一把学习的mongodb,如果有javascript基础,学习"芒果DB" ...

  3. MongoDB学习笔记—03 增删改查操作

    MongoDB的CURD操作分别通过函数insert().update().find().remove()进行 MongoDB文档新增与删除 MongoDB中关于文档的新增与删除比较简单.主要通过in ...

  4. MongoDB 学习笔记(四)C# 操作MongoDB

    C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://github.com/mongo ...

  5. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  6. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

  7. MongoDB学习笔记(2):数据库操作及CURD初步

    MongoDB学习笔记(2):数据库操作及CURD 数据库操作 创建数据库 首先MongoDB中数据库的创建和数据库的切换都是使用命令,USE DATABASE,如果要切换的数据库不存在则会进行创建, ...

  8. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  9. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

随机推荐

  1. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

  2. SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

    前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...

  3. 关于C#静态变量初始化问题

    关于这个静态变量,平时自己没有太认真的去认识.最近调项目的bug,让我重新认识了静态变量的特点. 其实,我们一直都在说:静态变量只在类第一次初始化的时候进行初始化,以后都不初始化. 很简单的一句话,但 ...

  4. HTML基本元素(二)

    1.图像 <img src="URL" alt="" /> 说明 src 定义图像的url alt 定义图像的替代文本 width 设置图像的宽度 ...

  5. Web API与文件操作

    前段时间,一直有练习ASP.NET MVC与Web API交互,接下来,Insus.NET再做一些相关的练习,Web API与文件操作,如POST文件至Web API,更新或是删除等. 不管怎样,先在 ...

  6. Repeater 控件

    Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功能,这意味着用户必须通过创建模板来提供 Repeater 控件的布局.当网页 ...

  7. PetaPoco4.0的事务为什么不会回滚

    using (var srop=DbHelper.CurrentDb.GetTransaction()) { ID = bp.AddModel(model).ToStr(); #region 参与楼盘 ...

  8. NPOI操作Excel辅助类

    /// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...

  9. 兼容性背景颜色半透明CSS代码(不影响内部子元素)

    如何简单兼容性的实现父元素是半透明背景色,而子元素不受影响. 兼容所有浏览器的背景颜色半透明CSS代码: background-color: rgba(, , , .); filter: progid ...

  10. JVM-绘图展现字节码执行引擎执行过程

    在我的上一篇博客JVM-String比较-字节码分析中介绍了String字符串比较的原因,借着分析字节码的机会,我这篇博客将会绘图展现方法内部字节码执行过程. 话不多说,贴上我们将要分析的Java方法 ...