一.前言 最近项目中要用到MongoDB,因此实现做了不少的调研.发现网上很多现有关于MongoDB C#官方驱动的调用方法都是基于1.8版本的,已经不是用了最新的2.2版本.因此我在基于C#官方驱动2.2的基础上,对MongoDB的调用方法做了一些封装,以便于调用. 封装的内容包括: 1.封装了获取数据库及集合的方法 2.封装了新增一条.多条数据的方法 3.封装了更新一条.根据条件更新多条数据的方法,注意:是将对象统一更新成同一内容. 4.封装了删除一条,根据条件删除多条数据的方法. 5.封装…
本人系新接触MongoDB不久,属于MongoDB的菜鸟范畴.在使用MongoDB的过程中,总结了一些认识,在此总结跟大家分享.欢迎拍砖. 关于MongoDB的内容,在此就不做介绍了,网上有浩如烟海的文章介绍.本人不善理论,不妥之处,望指正. 想法来由:本人之前主要使用EF的CodeFirst方式做一些开发,EF的优劣在此不做评述.但已经习惯了EF式的代码编写方式,所以做了一个小的框架,来模拟实现类似EF代码风格,以减少开发者在实际使用过程中对MongoDB的关注和维护.为其取名为MongoDB…
回到目录 MongoDB的官方C#驱动,让我们使用起来也很方便,但对于Linq开发人员来说,可能有些不了解,所以,我还是将官方驱动进行了二次封装,而对于一个比较个性化的mongo操作,使用我封装的也很难实现,所以,还是需要大家直接使用官方驱动的原生写法的,下面进行一个介绍. Insert操作 mongoRepository.Insert(new M_FullClassify { }); Update操作 需要注意update由query(要更新的记录通过它来定位记录)和set(要更新的字段)组成…
本次改动的主要内容是实现MongoDB.Repository在MongoDB中建立索引. 建立索引主要使用MongoDB的官方驱动中EnsureIndex方法. 在MongoDB.Repository中建立一个BsonIndexAttribute,用以标识需要建立索引的属性. /// <summary> /// Indicates that this field or property should be index. /// </summary> [AttributeUsage(…
已经升级了mongodb至最新的3.4的版本,我想想也该把驱动升到最新的了,我用的驱动还是1.7的版本呢,之前几次想升级,都是因为升级驱动需要改动的代码太大了,升级的成本很高,所以懒得动,就这么的用了几年了.但是现在出了很多新功能,如果不升级的话,根本用不了,比如Lookup等功能.想想咬牙就升级了.驱动DLL一换,就发现代码全报错了.以前的IMongoQuery等方法全用不了的.有一些方法也不见了,在修改的过程中,只能写边修改边写代码测试,一个一个测试它提供的新方法.等了解了新的驱动后,觉得改…
回到目录 对于数组对象mongodb本身是支持的,不过对于数组的更新,mongodb的Csharp驱动目前只支持一级,即你的对象里包含数组,而数组又包括数组,这表示两层,这在更新子数组时,Csharp驱动是不支持的,今天要说的就是如何让它支持子数组的更新,下面是我给出的数据结构…
本次改动的主要内容是实现MongoDB.Repository对MongoDBRef的支持. MongoDB对一对一,一对多,多对多关系的维护,官方推荐文档嵌入方式,反映到模型的设计如下: public class Student : Entity { public string Name { get; set; } public int Age { get; set; } } public class Teacher : Entity { public string Name { get; se…
异常情况描述 有一个“文章”类,其中包含一个“List<段落>”类型的属性,“段落”类是抽象类,其子类有“副标题段落”.“文本段落”.“图像段落”.“附件段落”.“列表段落”等类型. 将“文章”类型的对象存入MongoDB数据库完全没问题,但是从数据库取回则会引发这样的异常: [InvalidOperationException: 无法创建抽象类的实例.] 解决方法 之前曾就此问题向 magicDict 请教过,他给出的办法是参照这篇博文:http://www.cnblogs.com/zlp5…
本次主要内容:修正MongoDB.Repository框架对多数据库的支持. 在之前的五篇文章中对MongoDB.Repository框架做了简单的介绍是实现思路.之前是考虑MongoDB.Repository框架是可以同时支持多数据,且已实现支持多数据库.但有个前提:实体的类型不能重复,即一个实体类型(即命名空间一样)只能存在一个数据库中.举例,X实体,如果注册在了A数据库,那么将不能注册在B数据库中. 虽然实现了该功能,但是存在一些问题和不足: 问题:只有在使用具体的实例进行数据库操作时才会…
本次改动主要内容:为List<MongoDBRef>增加扩展方法 在MongoDB.Repository的使用过程中,发现在一个类中只定义一个List<MongoDBRef>是不够用的,即IRefEntity和IDBRefContainer两个接口并不能满足实体设计的需要.在很多时候,我们需要有多个List<MongoDBRef>,而原IRefEntity接口中只定义了一个List<MongoDBRef>.实际情况如 我们定义一个用户类Customer,这个…