Lind.DDD.Repositories.Mongo层介绍

回到目录

之前已经发生了

大叔之前讲过被仓储化了的Mongodb,而在大叔开发了Lind.DDD之后,决定把这个东西再搬到本框架的仓储层来,这也是大势所趋的,毕竟mongodb是最像关系数据库的NoSql,它的使用场景是其它nosql所不能及的,这点是毋庸置疑的!

下面是大叔总结的Mongodb文章目录,选自<大叔Mongodb系列>

MongoDB学习笔记~环境搭建 (2015-03-30 10:34)

MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00)

MongoDB学习笔记~ObjectId主键的设计 (2015-04-09 13:08)

MongoDB学习笔记~客户端命令行的使用 (2015-04-10 13:40)

MongoDB学习笔记~索引提高查询效率 (2015-04-10 15:35)

MongoDB学习笔记~为IMongoRepository接口添加分页取集合的方法 (2015-04-11 22:13)

MongoDB学习笔记~Mongo集群和副本集 (2015-04-17 16:25)

MongoDB学习笔记~为IMongoRepository接口添加了排序和表达式树,针对官方驱动 (2015-04-27 22:11)

MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动 (2015-04-29 22:36)

MongoDB学习笔记~为IMongoRepository接口更新指定字段(2015-04-30 22:22)

MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事

MongoDB学习笔记~以匿名对象做为查询参数,方便查询子对象

MongoDB学习笔记~Update方法更新集合属性后的怪问题

MongoDB学习笔记~批量插入方法的实现

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

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

MongoDB学习笔记~MongoDB实体中的值对象

MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!

MongoDB学习笔记~大叔分享批量添加—批量更新—批量删除

MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示

MongoDB学习笔记~管道中的分组实现group+distinct

MongoDB学习笔记~官方驱动的原生Curd操作

MongoDB学习笔记~官方驱动嵌套数组对象的更新

MongoDB学习笔记~使用原生语句实现三层集合关系的更新

MongoDB学习笔记~数据结构与实体对象不一致时,它会怎么样?

Lind.DDD里的仓储模块,Mongodb有一席之地

aaarticlea/png;base64,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" alt="" />

大叔的Mongodb仓储结构

aaarticlea/png;base64,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" alt="" />

大叔在设计mongodb查询和更新时,使用到了递归

  /// <summary>
/// 按需要更新的构建者
/// 递归构建Update操作串
/// </summary>
/// <param name="fieldList"></param>
/// <param name="property"></param>
/// <param name="propertyValue"></param>
/// <param name="item"></param>
/// <param name="fatherValue"></param>
/// <param name="father"></param>
private void GenerateRecursionExpress(
List<UpdateDefinition<TEntity>> fieldList,
PropertyInfo property,
object propertyValue,
TEntity item,
object fatherValue,
string father)
{
//复杂类型
if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && propertyValue != null)
{
//集合
if (typeof(IList).IsAssignableFrom(propertyValue.GetType()))
{
var modifyIndex = ;//要更新的记录索引
foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
if (sub.PropertyType.IsClass && sub.PropertyType != typeof(string))
{
var arr = propertyValue as IList;
if (arr != null && arr.Count > )
{ var oldValue = property.GetValue(fatherValue ?? item) as IList;
if (oldValue != null)
{
for (int index = ; index < arr.Count; index++)
{
for (modifyIndex = ; modifyIndex < oldValue.Count; modifyIndex++)
if (sub.PropertyType.GetProperty(EntityKey).GetValue(oldValue[modifyIndex]).ToString()
== sub.PropertyType.GetProperty(EntityKey).GetValue(arr[index]).ToString())//比较_id是否相等
break;
foreach (var subInner in sub.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
if (string.IsNullOrWhiteSpace(father))
GenerateRecursionExpress(fieldList, subInner, subInner.GetValue(arr[index]), item, arr[index], property.Name + "." + modifyIndex);
else
GenerateRecursionExpress(fieldList, subInner, subInner.GetValue(arr[index]), item, arr[index], father + "." + property.Name + "." + modifyIndex);
}
}
} }
}
}
}
//实体
else
{
foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
{ if (string.IsNullOrWhiteSpace(father))
GenerateRecursionExpress(fieldList, sub, sub.GetValue(propertyValue), item, property.GetValue(fatherValue), property.Name);
else
GenerateRecursionExpress(fieldList, sub, sub.GetValue(propertyValue), item, property.GetValue(fatherValue), father + "." + property.Name);
}
}
}
//简单类型
else
{
if (property.Name != EntityKey)//更新集中不能有实体键_id
{
if (string.IsNullOrWhiteSpace(father))
fieldList.Add(Builders<TEntity>.Update.Set(property.Name, propertyValue));
else
fieldList.Add(Builders<TEntity>.Update.Set(father + "." + property.Name, propertyValue));
}
}
}

让代码去改变我们的生活,改变我们的世界吧!

回到目录

上一篇:Dubbo 支持哪些序列化协议?


下一篇:PHP图片裁剪类