c#中我们可以使用MongoDB.Driver驱动进行对MongoDB数据库的增删改查.

首先需要在NuGet中安装驱动

安装完毕后会发现会有三个引用

其中 MongoDB.Driver和MongoDB.Driver.Core是MongoDB的驱动,而MongoDB.Bson是MongoDB以Bson方式存储

注:BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型

1.配置MongoDB

  //实例化Mongo的连接字符串对象
static MongoUrl mongoUrl = new MongoUrl("mongodb://127.0.0.1:27017");
//实例化Mongo客户端对象
static MongoClient client = new MongoClient(mongoUrl);
//获取所操作的数据库
static IMongoDatabase db = client.GetDatabase("user");
//获取所操作的集合
static IMongoCollection<User> coll = db.GetCollection<User>("User");

通过上面简单的代码就可以配置完成MongoDB的连接和设置等操作.

其中IMongoCollection接口中封装了对Mongo的CURD操作

上面代码中泛型User为自定义实体类User

 public  class User
{
[BsonId]
public string ID { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime BornDate { get; set; }
public override string ToString()
{
return $"姓名{Name},性别{Sex},出生日期{BornDate}";
}
}

User实体类中ID和BornDate属性都存在这特性,其中ID属性特性BsonId是声明此属性为数据库中ID,而BornDate中的特性是说明BornDate的序列化方式

2.增加

  增加使用IMongoCollection接口中的InsertOneInsertMany方法,分别为增加一个和多个

  public static void AddOne()
{
User user = new User
{
ID = Guid.NewGuid().ToString(),
Name = "狗娃",
Sex = "男",
BornDate = DateTime.Now
};
coll.InsertOne(user); }
public static void AddMany()
{
IEnumerable<User> users = new List<User>
{
new User{ID = Guid.NewGuid().ToString(),Name = "狗剩",Sex = "女",BornDate = DateTime.Now},
new User{ID = Guid.NewGuid().ToString(),Name = "铁蛋",Sex = "男",BornDate = DateTime.Now}
};
coll.InsertMany(users); }

3.查询

  查询使用Find方法,其中Find方法有多个参数,例如下面代码:

  public static void Find1()
{
var entitys = coll.Find<User>(y => y.Sex == "男").ToList();
foreach (var entity in entitys)
{
Console.WriteLine(entity);
}
}
public static void Find2()
{
//创建过滤器
FilterDefinition<User> filter = Builders<User>.Filter.Eq(y => y.Sex, "男");
var entitys = coll.Find(filter).ToList();
foreach (var item in entitys)
{
Console.WriteLine(item);
}
}

  上面代码中我们使用了两种重载,第一种直接在FInd方法中创建Lambda,第二种使用过滤器.两种方式效果一样,不过推荐第一种.

  :Builders.Filter是一个FilterDefinitionBuilder类:;这个类中存在这多种条件。

4.修改

  IMongoCollection中有UpdateOne和UpdateMany两类方法,其中UpdateOne更改匹配到的第一项,而UpdateMany更改匹配到的所有项

  public static void UpdateOne()
{
UpdateDefinition<User> update= Builders<User>.Update.Set(y => y.Sex, "男");
var res= coll.UpdateOne<User>(y => y.Sex == "女", update);
Console.WriteLine(res.MatchedCount); }
public static void UpdateMany()
{
UpdateDefinition<User> update = Builders<User>.Update.Set(y => y.Sex, "男");
var res = coll.UpdateMany<User>(y => y.Sex == "女", update);
Console.WriteLine(res.MatchedCount); }

以上两个方法其中第一个方法只会更新一条,而第二个会更新两条.

 更新时需要先创建所更新的项,即创建UpdateDefinition类实例,通过Builders.Update.Set获取.

然后通过IMongoCollection对象的UpdateOne/UpdateMany方法进行修改,UpdateOne/UpdateMany方法会返回一个UpdateResult对象,这个对象包含着修改的信息

5.删除

IMongoCollection删除方法也是两类,DeleteOne/DeleteMany,其规则与其它一样

  public  static void DeleteOne()
{
var res= coll.DeleteOne(y => true);
Console.WriteLine(res.DeletedCount);
}
public static void DeleteMany()
{
var res = coll.DeleteMany(y => true);
Console.WriteLine(res.DeletedCount);
}

删除方法也会返回一个DeleteResult对象,其包含着删除的信息.

6.其它方法

 在查询时,MongoDB.Driver也可以跟其它数据库一样使用分页,排序等

如排序查询

 var entitys = coll.Find<User>(y => y.Sex == "男").Sort(Builders<User>.Sort.Ascending(y=>y.Age)).ToList();

分页查询

  var entitys = coll.Find<User>(y => y.Sex == "男").Skip().Limit().ToList();

MongoDB Driver 简单的CURD的更多相关文章

  1. c# MongoDB Driver 官方教程翻译

    先贴官方文档地址:http://mongodb.github.io/mongo-csharp-driver/2.5/getting_started/quick_tour/ 安装部分很简单,nuget搜 ...

  2. Node.js学习笔记(3) - 简单的curd

    这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简 ...

  3. PHP7 - MongoDB Driver 使用心得

    php7 只能使用Mongodb driver来驱动mongodb. 使用Mongodb Driver连接数据库 刚开始使用Mongodb Driver的时候我是拒绝的.查看官方文档只看到一排的类和不 ...

  4. C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑

    C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...

  5. MongoDB的简单操作(asp.net)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using MongoDB.D ...

  6. C#实现对mongoDB的简单增删查改

    首先添加所需要驱动包(可通过nuget获得) using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders; 一.设置配置 ...

  7. [angularjs] MVC + Web API + AngularJs 搭建简单的 CURD 框架

    MVC + Web API + AngularJs 搭建简单的 CURD 框架 GitHub 地址:https://github.com/liqingwen2015/Wen.MvcSinglePage ...

  8. 基于MongoDB.Driver的扩展

    由于MongoDB.Driver中的Find方法也支持表达式写法,结合[通用查询设计思想]这篇文章中的查询思想,个人基于MongoDB扩展了一些常用的方法. 首先我们从常用的查询开始,由于MongoD ...

  9. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

随机推荐

  1. Java内存管理及对Java对象管理

    Java内存管理及对Java对象管理 1Java内存管理 1.1Java中的堆和栈 通常来说,人们会将Java内存氛围栈内存(Stack)和堆内存(Heap). 栈内存用来保存基本类型的变量和对象的引 ...

  2. 洛谷 P1914 小书童——密码【字符串+模拟】

    P1914 小书童——密码 题目背景 某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成.且 ...

  3. bzoj:3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛

    Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡 ...

  4. bzoj:1654 [Usaco2006 Jan]The Cow Prom 奶牛舞会

    Description The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in ...

  5. [ZOJ3256] Tour in the Castle

    插头DP+矩阵乘法 m喜闻乐见地达到了10^9级别..而n<=7,并且没有障碍..所以列与列之间的转移时一样的..就可以上矩乘了. 感觉自己快没救了..看半天题解还是不懂.. http://ww ...

  6. [hdu3943]K-th Nya Number

    挺正常的一道模板题. f[i][j][k]表示i位的数,有j个4,k个7的方案数. 具体实现的话...我写了发二分答案..需要注意的是二分时应该是mid=L+(R-L)/2..不然分分钟爆longlo ...

  7. hdu_1026(最短路)

    题意:最快出去的路径 题解:一看就是一个很简单的最短路,用优先队列写个spfa就过了,但是没想到水了个(n*n)^2的算法也过了...愿意很简单,因为是个稀疏图 敲完以后一百度发现就是个简单的bfs+ ...

  8. chorme浏览器的Access-Control-Allow-Origin拦截限制

    今天在公司调试一个项目,这个项目的前后端是分离开的,也就是说前后端是在两个站点上的.我负责的前端页面在请求后端数据的时候数据可以拿到,但是chrome安全级别高,自动拦截跨域和站点的数据请求及交互,出 ...

  9. php 下载文件的头信息 Determine Content Type

    <?php if(!function_exists('mime_content_type')) { function mime_content_type($filename) { $mime_t ...

  10. Effective Java 第三版——26. 不要使用原始类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...