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. metamask注记词

    leaf orbit poet zebra toy day put dinosaur review cool pluck throw(m) 一个钱包地址 里面有多个账号 菲苾代表了不同网络

  2. 自测之Lesson9:时钟与信号

    题目一:编写一个获取当前时间的程序,并将其以“year-mon-day time”的形式输出. 程序代码: #include <stdio.h> #include <time.h&g ...

  3. Thunder团队第二周 - Scrum会议3

    Scrum会议3 小组名称:Thunder 项目名称:爱阅app Scrum Master:代秋彤 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...

  4. oracle数据库之触发器

    触发器是许多关系数据库系统都提供的一项技术.在 ORACLE 系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的 PL/SQL 块. 一. 触发器类型 触发器在数据库里以独立的对象存储,它与 ...

  5. Java 动态绑定和多态

    动态绑定和多态 动态绑定是指:"在执行程序期间(而非编译期间),判断引用所指对象的实际类型,调用其相应的方法." 动态绑定(多态)存在的条件 要有继承. 要有重写. 父类引用指向子 ...

  6. TCP系列08—连接管理—7、TCP 常见选项(option)

    一.TCP选项概述 在前面介绍TCP头的时候,我们说过tcp基本头下面可以带有tcp选项,其中有些选项只能在连接过程中随着SYN包发送,有些可以延后.下表汇总了一些tcp选项 其中我标记为红色的部分是 ...

  7. winform Form窗体和UserControl用户空间嵌入Panel容器并填充

    private void sbtbflList_Click(object sender, EventArgs e) { ucxmflList ucfl = new ucxmflList();//用户控 ...

  8. Python实现FTP服务功能

    本文从以下三个方面, 阐述Python如何搭建FTP服务器 一. Python搭建FTP服务器 二. FTP函数释义 三. 查看目录结构 四. 上传下载程序 一. Python搭建FTP服务器 1. ...

  9. 设置启动窗体Program.cs文件

    using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; names ...

  10. pyHeatMap生成热力图

    库链接:https://pypi.org/project/pyheatmap/ 现在的linux系统默认都是安装好的py环境,直接用pip进行热力库安装 pip install pyheatmap 或 ...