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 ...
随机推荐
- beta 圆桌 3
2018-12-16图片缺失,当日数据: 总工作量:24 已完成:5 剩余:19 031602111 傅海涛 1.今天进展 实时字幕的实现大概 2.存在问题 实时字幕存在不稳定和耗费资源 3.明天安排 ...
- 【壹拾壹周】final_review
项目名:俄罗斯方块 组名:新蜂 组长:武志远 组员:宫成荣 杨柳 谢孝淼 李桥 final Review会议 时间:2016.12.3 会议内容 设想和目标 1.在final阶段发布时的预期目标是什么 ...
- 【Leetcode】33. Search in Rotated Sorted Array
Question: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforeh ...
- swoole多进程
<?php /** * Created by PhpStorm. * User: brady * Date: 2018/11/19 * Time: 16:29 */ $workers = []; ...
- Django通用视图APIView和视图集ViewSet的介绍和使用(Django编程-1)
1.APIView DRF框架的视图的基类是 APIView APIView的基本使用和View类似 Django默认的View请求对象是 HttpRequest,REST framework 的请求 ...
- eclipse 安装报错
14 11:17:13] ERROR: org.eclipse.equinox.p2.transport.ecf code=1002 Unable to read repository at http ...
- 【题解】 [HNOI2015]菜肴制作 (拓扑排序)
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...
- RK哈希(Rabin_Karp 哈希)
Rabin_Karp 哈希通过比较hash值是否相等来比较每个字符串是否相等有概率出错(很小)字符串x1,x2,x3……xk基底e;模数mo;hash=(xk*e^0+xk-1*e^1+......+ ...
- luogu4155/bzoj4444 国旗计划 (倍增)
成环,把每个区间变成两个然后展开成链 一个人的下一个人肯定是在彼此相交的基础上,右端点越大越好 于是就把它连到相交的.右端点最大的点上,连成一棵树 于是每次只要从某个节点开始,一直在树上跳到覆盖了一个 ...
- loj6253/luogu4062-Yazid的新生舞会
先考虑部分分(只有01/只有0~7)做法:枚举每个数,把和他相同的设为1,不同的设为-1,然后这个数作为众数贡献的个数就是区间和>0的个数 推着做,树状数组记前缀和<=x的区间的数量就可以 ...