C#操作Mongo进行数据读写
C#操作MongoHelp类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
namespace MvcMongoDemo.Common
{
public class MongoHelper<T> where T:class
{
private string conn = "mongodb://localhost";
private string dbName = "test";
private string collectionName;
//string collection = "user";
private MongoDatabase db; public MongoHelper()
{
db = GetCollection();
collectionName = typeof(T).Name;
} /// <summary>
/// 设置你collection
/// </summary>
private MongoDatabase GetCollection()
{
MongoClient client = new MongoClient(conn);
return client.GetServer().GetDatabase(dbName); }
/// <summary>
/// 获取所有的数据
/// </summary>
/// <returns></returns>
public List<T> GetAllList()
{ return db.GetCollection<T>(collectionName).FindAll().ToList(); }
/// <summary>
/// 根据条件查询获取数据
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<T> GetList(IMongoQuery query)
{ return db.GetCollection<T>(collectionName).Find(query).ToList();
} /// <summary>
/// 分页查询获取数据信息
/// </summary>
/// <param name="query">where条件</param>
/// <param name="totalCount">总条数</param>
/// <param name="pageIndex">当前页</param>
/// <param name="pageSize">每页显示数量</param>
/// <returns></returns>
public List<T> GetListPage(IMongoQuery query,out int totalCount, int pageIndex=,int pageSize=)
{ totalCount = int.Parse(db.GetCollection<T>(collectionName).Find(query).Count().ToString());
return db.GetCollection<T>(collectionName).Find(query).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
} /// <summary>
/// 根据条件查询返回单条数据
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public T GetSign(IMongoQuery query)
{ return db.GetCollection<T>(collectionName).FindOne(query);
} /// <summary>
/// 根据主键_id查询获取单条数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public T GetSign(BsonValue id)
{ return db.GetCollection<T>(collectionName).FindOneById(id);
} /// <summary>
/// 单条数据添加
/// </summary>
/// <param name="model"></param>
public void Add(T model)
{ db.GetCollection<T>(collectionName).Insert<T>(model);
} /// <summary>
/// 批量添加数据
/// </summary>
/// <param name="list"></param>
public void AddtBatch(List<T> list)
{
db.GetCollection<T>(collectionName).InsertBatch<T>(list);
} /// <summary>
/// 根据条件删除数据
/// </summary>
/// <param name="query"></param>
public void Delete(IMongoQuery query)
{
db.GetCollection<T>(collectionName).Remove(query); } /// <summary>
/// 删除所有数据记录
/// </summary>
public void DeleteAll()
{
db.GetCollection<T>(collectionName).RemoveAll();
} /// <summary>
/// 更新单个字段值
/// </summary>
/// <param name="query"></param>
/// <param name="updateQuery"></param>
public void Modity(IMongoQuery query,IMongoUpdate updateQuery )
{ db.GetCollection<T>(collectionName).Update(query,updateQuery,UpdateFlags.Multi); } /// <summary>
/// 更新多个字段值
/// </summary>
/// <param name="query"></param>
/// <param name="updates"></param>
public void Modity(IMongoQuery query, UpdateBuilder[] updates)
{ WriteConcernResult result = db.GetCollection<T>(collectionName).Update(query, Update.Combine(updates), UpdateFlags.Multi); } }
}
添加数据
Common.MongoHelper<UserInfo> mongoHelp = new Common.MongoHelper<UserInfo>();
List<UserInfo> list = new List<UserInfo>();
for (int i = ; i <= ; i++)
{
UserInfo model = new UserInfo(); model.ID = i;
model.Name = "用户" + i;
model.Age = - i;
model.Gender = i % == ? true : false;
model.Address = "地址" + i;
model.AddTime = System.DateTime.Now.AddDays(-i); //单条数据记录添加
// mongoHelp.Add(model);
list.Add(model); } //批量插入
// mongoHelp.AddtBatch(list);
删除数据
IMongoQuery query = null;
query = Query.And(
Query.EQ("Name", "用户2") ); //根据条件删除
mongoHelp.Delete(query); //删除所有数据
mongoHelp.DeleteAll();
更新数据
IMongoQuery queryWhere = Query.And(Query.EQ("ID",));
List<UpdateBuilder> updateList = new List<UpdateBuilder>();
updateList.Add(Update.Set("Address", "我现在住在北京哈哈```"));
updateList.Add(Update.Set("Name", "用户修改过的1"));
updateList.Add(Update.Set("Age", ));
IMongoUpdate update = Update.Set("Name", "用户修改过的");
//对单个字段值进行更新
mongoHelp.Modity(queryWhere, update);
//更新多个字段值
mongoHelp.Modity(queryWhere, updateList.ToArray());
查询数据
//根据_id索引去查询单条数据
UserInfo model2=null;
BsonValue id = "5973374e718e126c2801b81d";
model2= mongoHelp.GetSign(id); //根据条件去查询数据
model2 = mongoHelp.GetSign(queryWhere);
List<UserInfo> listModel = new List<UserInfo>(); //查询返回多条数据记录
listModel = mongoHelp.GetList(queryWhere); //获取所有数据记录
listModel = mongoHelp.GetAllList(); //分页获取数据
int totalCount = ;
listModel = mongoHelp.GetListPage(queryWhere, out totalCount, , );
UserInfo实体类
public class UserInfo
{ /// <summary>
/// 主键索引,没有该字段更新数据时会报异常
/// </summary>
public ObjectId _id { get; set; }
public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public bool Gender { get; set; } public string Address { get; set; } public DateTime AddTime { get; set; }
}
C#操作Mongo进行数据读写的更多相关文章
- 实现AT24C02的数据读写操作
/*************************************************************** 功能:11:32 2008-6-27 作者:SG 时间:2004-03 ...
- 如何确保Memcache数据读写操作的原子性(转)
什么是CAS协议 Memcached于1.2.4版本新增CAS(Check and Set)协议类同于Java并发的CAS(Compare and Swap)原子操作,处理同一item被多个线程更改过 ...
- JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作
基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import ja ...
- HBase 数据读写流程
HBase 数据读写流程 2016-10-18 杜亦舒 读数据 HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中 假设现在想在用户表中获取 ro ...
- Asp.net通过Jquery操作WebService进行Ajax读写
一说到开始,我们当然需要项目. 首先,创建一个Asp.net Web 应用,然后新增一个名称为“Web 服务”的文件,也就是后缀名为".asmx"的文件,然后需要进行配置一下,在W ...
- 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据
[源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...
- 【详解】换一个角度看Socket的数据读写
前言 以前对IO.NIO还算了解,也写过Netty的项目.但是对底层的数据传递不是很了解,一直存有这方面的疑惑.但是由于有其他事情就被打断了.前阵子因为想要了解volatile关键字的原理,学习了下J ...
- java拾遗5----Java操作Mongo入门
Java操作Mongo入门 参考: http://api.mongodb.com/java/3.2/ http://www.runoob.com/mongodb/mongodb-java.html h ...
- mongo实践-透过js shell操作mongo
mongo实践-通过js shell操作mongo 保存命令: j={name:"wangjingjing",age:15} db.user.save(j); 查询命令: var ...
随机推荐
- 三步轻松搞定delphi中CXGRID手动添加复表头(多行表头,报表头)
网上有代码动态生成cxgrid多行表头的源码,地址为:http://mycreature.blog.163.com/blog/static/556317200772524226400/ 如果要手动设计 ...
- 侧边导航栏css示例
效果展示: html: <div class="sidebar"> <ul> <li>优先级 <ul> <li>< ...
- VC++ 常见问题及其解决方法
1. 无法找到“XXX.exe”的调试信息,或者调试信息不匹配: 选择 配置属性->链接器->调试->生成调试信息 改为 是 选择 配置属性->C/C++ ->常规-&g ...
- [代码]--ORA-01843: 无效的月份
1.插入的日期如果是DateTime类型的,没有影响 2.如果DateTime.ToString()获取的日期,就会报错,例如(@param_datetime = cf.GetServerDateTi ...
- sql bak还原到新数据库
1 创建新数据库 TestDB 2 使用语句 use master restore database [TestDB] from disk = 'D:\SqlDataBak\SanJu\SanJu ...
- POJ2125 Destroying The Graph
题目链接:ヾ(≧∇≦*)ゝ 大致题意: 给出一个有向图D=(V,E).对于每个点U,定义两种操作a(u),b(u) 操作a(u):删除点U的所有出边,即属于E,操作花费为Ca(u). 操作b(u):删 ...
- R vs Python,数据分析中谁与争锋?
R和Python两者谁更适合数据分析领域?在某些特定情况下谁会更有优势?还是一个天生在各方面都比另一个更好? 当我们想要选择一种编程语言进行数据分析时,相信大多数人都会想到R和Python——但是从这 ...
- 【bzoj3576】 Hnoi2014—江南乐
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接) 题意 给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分 ...
- c++函数写的都对,还是说incompatible或者not found的解决办法
vs2010,c++,定义了一个函数如下,在BianHuanYuDib.h文件中: 在BianHuanYuDib.cpp中: 写的完全正确,但还是会报错: 很明显,连std都报错了,一般不是真的有很大 ...
- springcloud与dubbo对比:
我们直接将结论先列出来,然后逐个分析: 本博客借鉴此文章:http://blog.csdn.net/shuijieshuijie/article/details/53133082 打个不恰当的比喻: ...