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 ...
随机推荐
- laravel DB 执行 mysql函数或者字段
使用laravel框架中的DB查询mysql数据库的时候,综合遇到执行mysql函数或者,自定义字段,一般情况下DB会把传入的函数当做字段处理 方法如下: DB:raw('函数或者字段'); DB:w ...
- 查看iOS应用crash日志
基本操作: 1.电脑安装好Xcode,连接好手机设备 2.打开Xcode,点击Window-Devices and Simulators 3.选中手机设备,点击View Device Logs,即可查 ...
- 如何用js替换文本里的换行符 \n?
有下面一段文本, 在编辑器里的格式如下: <div id="foo"> line1line2line3</div> 切换到浏览器, 显示如下 line1li ...
- Codeforces 859D - Third Month Insanity
题意 有 \(2^n\) 个人要进行比赛,每次 \(2i\) 与 \(2i+1\) 号人进行比赛(\(i\in [0,2^{n-1})\) ).这一轮中赢的人进入下一轮.下一轮比赛的时候把进入这一轮的 ...
- SP4487 GSS6 - Can you answer these queries VI
题目大意 给出一个由N个整数组成的序列A,你需要应用M个操作: I p x 在 p 处插入插入一个元素 x D p 删除 p 处的一个元素 R p x 修改 p 处元素的值为 x Q l r 查询一 ...
- 【刷题】LOJ 6122 「网络流 24 题」航空路线问题
题目描述 给定一张航空图,图中顶点代表城市,边代表两个城市间的直通航线.现要求找出一条满足下述限制条件的且途经城市最多的旅行路线. 从最西端城市出发,单向从西向东途经若干城市到达最东端城市,然后再单向 ...
- suoi31 最近公共祖先2 (倍增lca)
根为r时x.y的公共祖先,就是lca(x,r),lca(x,y),lca(r,y)中深度最大的那一个,不要再在倍增的时候判来判去还判不对了... #include<bits/stdc++.h&g ...
- keeplived工作原理及配置
一.keepalived简介及作用 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能 keepal ...
- from表单文件上传后页面跳转解决办法
from表单上传文件,路径跳转后,又不能转发回来. 本人的一个解决办法是.返回一段html代码,浏览器解析后后退一步,回到原来的页面并刷新. return "<html>< ...
- ASP.NET调用cmd命令提示符拒绝访问解决方案
using System.Diagnostics; public class CmdHelper { private static string CmdPath = @"C:\Windows ...