Wisdombud.Mongo

包含内容

 MongoDB.Bson.dll
MongoDB.Bson.xml
MongoDB.Driver.dll
MongoDB.Driver.xml
Wisdombud.Mongo.dll
Wisdombud.Mongo.XML

用法示例

需要注意的地方

  1. dao实例化需要指定一个URL,现在我们用的都是没有密码的,格式:mongodb://localhost/database_name
  2. 每个实体要继承MongoDbEntity,MongoDbEntity有一个属性是ID,这个ID不需要赋值
using System.Collections.Generic;
using Wisdombud.Mongo;
namespace MongoTest
{
class Program
{
private static MongoDbBaseDao<Person> dao = new MongoDbBaseDao<Person>("mongodb://localhost/database_name");
static void Main(string[] args)
{
SaveDemo();
UpdateDemo();
}
private static void SaveDemo()
{
Person p = new Person();
p.Name = "wisdombud";
p.Children = new List<string>();
p.Children.Add("jungong");
p.Children.Add("mobile");
dao.Save(p);
}
private static void UpdateDemo()
{
var person = dao.GetByCondition(a => a.Name == "wisdombud");
if (person != null)
{
person.Name = "zhaoaaaaa";
dao.Save(person);
}
}
}
public class Person : MongoDbEntity
{
public string Name { get; set; }
public List<string> Children { get; set; }
}
}

核心源码


#region Public Methods and Operators /// <summary>
/// Counts the specified condition.
/// </summary>
/// <param name="condition">The condition.</param>
/// <returns></returns>
public virtual long Count(Expression<Func<T, bool>> condition)
{
return this.repository.GetCollection<T>(this.collectioname).AsQueryable().Where(condition).LongCount();
} /// <summary>
/// Count all elements
/// </summary>
/// <returns></returns>
public virtual long Count()
{
return this.repository.GetCollection<T>(this.collectioname).Count();
} /// <summary>
/// Deletes the specified object.
/// </summary>
/// <param name="pobject">The object.</param>
public virtual void Delete(T pobject)
{
this.repository.GetCollection<T>(this.collectioname).Remove(Query.EQ("_id", new ObjectId(pobject.Id)));
} /// <summary>
/// Deletes the specified object.
/// </summary>
/// <param name="condition"></param>
public virtual void Delete(Expression<Func<T, bool>> condition)
{
var todelete = this.GetAll(condition) as List<T>;
if (todelete == null || todelete.Count <= 0)
{
return;
}
foreach (T t in todelete)
{
Delete(t);
}
} public virtual void DeleteAll()
{
IEnumerable<T> todelete = this.GetAll();
foreach (T t in todelete)
{
Delete(t);
}
} /// <summary>
/// Gets all.
/// </summary>
/// <returns></returns>
public virtual IEnumerable<T> GetAll()
{
return this.Convert2Show(this.repository.GetCollection<T>(this.collectioname).FindAll().ToList());
} /// <summary>
/// Gets all using a condition.
/// </summary>
/// <param name="condition">The condition.</param>
/// <returns></returns>
public virtual IEnumerable<T> GetAll(Expression<Func<T, bool>> condition)
{
return this.Convert2Show(this.repository.GetCollection<T>(this.collectioname).AsQueryable().Where(condition).ToList());
} /// <summary>
/// Gets all using a condition, a TOP clause and an optional orderBy clause.
/// </summary>
/// <param name="condition">The condition.</param>
/// <param name="maxresult">The max result.</param>
/// <param name="orderByDescending">if set to <c>true</c> [order by descending].</param>
/// <returns></returns>
public virtual IEnumerable<T> GetAll(
Expression<Func<T, bool>> condition,
int maxresult,
bool orderByDescending)
{
IQueryable<T> query = this.repository.GetCollection<T>(this.collectioname).AsQueryable().Where(condition); return this.Convert2Show(orderByDescending
? query.OrderByDescending(x => x.Id).Take(maxresult).ToList()
: query.OrderBy(x => x.Id).Take(maxresult).ToList());
} /// <summary>
/// Gets the by condition.
/// </summary>
/// <param name="condition">The condition.</param>
/// <returns></returns>
public virtual T GetByCondition(Expression<Func<T, bool>> condition)
{
return this.Convert2Show(this.repository.GetCollection<T>(this.collectioname).AsQueryable().Where(condition).FirstOrDefault());
} /// <summary>
/// Gets the by MongoId.
/// </summary>
/// <param name="MongoId">The _id.</param>
/// <returns></returns>
public virtual T GetById(string MongoId)
{
return this.Convert2Show(this.repository.GetCollection<T>(this.collectioname).FindOne(Query.EQ("_id", new ObjectId(MongoId))));
} public T GetFirst(string field, string search)
{
long selectCount;
IEnumerable<T> selectList = this.Search(field, search, 1, 1, out selectCount);
return this.Convert2Show(selectList.FirstOrDefault());
} /// <summary>
/// Paginates by an specified condition.
/// </summary>
/// <param name="condition">The condition.</param>
/// <param name="pagesize">The page size.</param>
/// <param name="page">The page.</param>
/// <param name="pOrderByClause">The OrderBy Clause.</param>
/// <param name="pOrderByDescending">if set to <c>true</c> [order by descending].</param>
/// <returns></returns>
public virtual IEnumerable<T> Paginate<TKey>(
Expression<Func<T, bool>> condition,
int pagesize,
int page,
out long allRecordCount,
Func<T, TKey> pOrderByClause,
bool pOrderByDescending)
{
IEnumerable<T> query = this.repository.GetCollection<T>(this.collectioname).AsQueryable().Where(condition);
allRecordCount = query.Count();
return this.PaginateQuery(pagesize, page, pOrderByClause, pOrderByDescending, query);
} /// <summary>
/// Paginates by an specified condition.
/// </summary>
/// <param name="pagesize">The page size.</param>
/// <param name="page">The page.</param>
/// <param name="pOrderByClause">The OrderBy Clause.</param>
/// <param name="pOrderByDescending">if set to <c>true</c> [order by descending].</param>
/// <returns></returns>
public virtual IEnumerable<T> Paginate<TKey>(
int pagesize,
int page,
Func<T, TKey> pOrderByClause,
bool pOrderByDescending)
{
IQueryable<T> query = this.repository.GetCollection<T>(this.collectioname).AsQueryable();
return this.PaginateQuery(pagesize, page, pOrderByClause, pOrderByDescending, query);
} /// <summary>
/// Saves the specified object.
/// </summary>
/// <param name="pobject">The object.</param>
/// <returns></returns>
public virtual T Save(T pobject)
{
pobject = this.Convert2Db(pobject);
this.repository.GetCollection<T>(this.collectioname).Save(pobject);
return pobject;
} /// <summary>
/// Search indexes
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="field"></param>
/// <param name="search">The search value</param>
/// <param name="page"></param>
/// <param name="pagesize"></param>
/// <param name="foundedRecords">total number of founded records in index</param>
/// <returns></returns>
public IEnumerable<T> Search(string field, string search, int page, int pagesize, out long foundedRecords)
{
IMongoQuery query = Query.Matches(field, new BsonRegularExpression(search, "i"));
List<T> totallist = this.repository.GetCollection<T>(this.collectioname).Find(query).ToList();
foundedRecords = totallist.Count;
var list = totallist.Skip(pagesize * (page - 1)).Take(pagesize).ToList();
return this.Convert2Show(list);
} public IEnumerable<T> Search_And(
IDictionary<string, string> keysAndValues,
int page,
int pagesize,
out long foundedRecords)
{
List<IMongoQuery> queries =
keysAndValues.Keys.Select(key => Query.Matches(key, new BsonRegularExpression(keysAndValues[key], "i")))
.ToList();
IMongoQuery query = Query.And(queries);
List<T> totallist = this.repository.GetCollection<T>(this.collectioname).Find(query).ToList();
foundedRecords = totallist.Count;
var list = totallist.Skip(pagesize * (page - 1)).Take(pagesize).ToList();
return this.Convert2Show(list);
} public IEnumerable<T> Search_And(IList<IMongoQuery> search, int page, int pagesize, out long foundedRecords)
{
IMongoQuery query = Query.And(search);
List<T> totallist = this.repository.GetCollection<T>(this.collectioname).Find(query).ToList();
foundedRecords = totallist.Count;
var list = totallist.Skip(pagesize * (page - 1)).Take(pagesize).ToList();
return this.Convert2Show(list);
} public IEnumerable<T> Search_Or(
IDictionary<string, string> keysAndValues,
int page,
int pagesize,
out long foundedRecords)
{
List<IMongoQuery> queries =
keysAndValues.Keys.Select(key => Query.Matches(key, new BsonRegularExpression(keysAndValues[key], "i")))
.ToList();
IMongoQuery query = Query.Or(queries);
List<T> totallist = this.repository.GetCollection<T>(this.collectioname).Find(query).ToList();
foundedRecords = totallist.Count;
var list = totallist.Skip(pagesize * (page - 1)).Take(pagesize).ToList();
return this.Convert2Show(list);
} public IEnumerable<T> Search_Or(IList<IMongoQuery> search, int page, int pagesize, out long foundedRecords)
{
IMongoQuery query = Query.Or(search);
List<T> totallist = this.repository.GetCollection<T>(this.collectioname).Find(query).ToList();
foundedRecords = totallist.Count;
var list = totallist.Skip(pagesize * (page - 1)).Take(pagesize).ToList();
return this.Convert2Show(list);
} #endregion

MongoDB入门(6)- 我们自己封装的MongoDB-C#版本的更多相关文章

  1. [MongoDB知识体系] 一文全面总结MongoDB知识体系

    MongoDB教程 - Mongo知识体系详解 本系列将给大家构建MongoDB全局知识体系.@pdai MongoDB教程 - Mongo知识体系详解 知识体系 学习要点 学习资料 官网资料 入门系 ...

  2. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  3. MongoDB入门(5)- 我们自己封装的MongoDB-Java版本

    用法 实体定义 package com.wisdombud.mongotool; import java.io.Serializable; import java.util.Date; import ...

  4. Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

    目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门(mongo.exe客户端操作) 库操作 插入 查询 修改 删除 存储过程 nodejs操作MongoDB 插入 查询 ...

  5. MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

    MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshell.c ...

  6. Nodejs学习笔记(十)—与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

    简介 MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshel ...

  7. MongoDB入门实践

    MongoDB入门实践 简单介绍MongoDB,包括MongoDB的使用场景.和MySQL的对比.安装部署.Java客户端访问及总结 MongoDB? 我们遵循需求驱动技术的原则,通过一个场景来引入M ...

  8. MongoDB入门(7)- SpringDataMongoDB

    入门 本文介绍如何应用SpringDataMongoDB操作实体和数据库,本文只介绍最基本的例子,复杂的例子在后面的文章中介绍. SpringDataMongoDB简介 SpringDataMongo ...

  9. mongodb入门学习小记

    Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...

  10. MongoDB 入门之基础 DCL

    此文章主要记录部分主要的 MongoDB 的 DCL 操作. MongoDB 默认不需要用户名和密码就可以用 mongodb.exe 登录 一.开启 MonogoDB 的权限模式 修改 MongoDB ...

随机推荐

  1. 局部加权回归(LWR) Matlab模板

    将百度文库上一份局部加权回归的代码,将其改为模板以便复用. q2x,q2y为数据集,是n*1的矩阵: r是波长参数,就是对于距离的惩罚力度: q_x是要拟合的数据横坐标,是1*n的矩阵: 得到的q_y ...

  2. HADOOP docker(十):hdfs 结构体系

    1.简介2.namenode和datanode3.The File System Namespace 文件系统命名空间4.Data Replication 数据复制5.Replica Placemen ...

  3. SOA是什么为什么要面向服务编程

    SOA(面向服务的架构),Service-Oriented Architecture,面向服务的体系结构. 也就是以服务为核心的架构.这里需要理解什么是服务. 比如你有一个读取通知的方法: publi ...

  4. Window Classes in Win32

    探索Win32系统之窗口类(Window Classes in Win32) Kyle MarshMicrosoft Developer Network Technology GroupMSDN技术组 ...

  5. jconsole工具监控数据分析

    当Jconsole连接成功后,它从JMX获取信息,我们便可以在里面监控具体的内容.Jconsole能捕获到以下信息: 概述 - JVM概述和一些监控变量的信息 内存 - 内存的使用信息 线程 - 线程 ...

  6. c运行时库,c标准库,Windows系统api的关系

    原文地址:http://blog.csdn.net/seastars_sh/article/details/8233324 C运行库和C标准库的关系 C标准库,顾名思义既然是标准,就是由标准组织制定的 ...

  7. JVM(二)GC

    GC简介 Java堆内存 在运行时,java的实例被存放在堆内存区域.当一个对象不在被引用,满足条件就会从堆内存移除并且内存空间被回收.堆内存由三个主要区域 1.新生代     Eden空间(任何实例 ...

  8. 总结 java 学习

    想着想把以前学的java学习笔记整理下发上来,慢慢整理吧.

  9. 创建 cordova 项目

    1. 安装 node.js 2.安装 cordova : npm install -g cordova 3.创建 安卓项目: cordova create <项目路径>  <包名&g ...

  10. [Leetcode] 2.Add Two Numbers(List To Long,模拟)

    本题题意是指将两个数倒序存储在链表中,再将两数之和同样存储在链表中输出. 我最开始的思路是将每一位相加,再考虑是否进位,但这时就需要考虑一些情况,比较麻烦. 于是我决定采取另一种在网上新学到的方法:这 ...