当前位置: 首页 > 编程日记 > 正文

MongoDB for C#基础入门

笔者这里采用的是mongoDB官网推荐使用.net驱动:

http://mongodb.github.io/mongo-csharp-driver/2.0/getting_started/quick_tour/

有关于MongoDB的安装读者可以参考其他的博客,对于基本的学习来说并不需要进行过多的配置。

创建连接

这一步骤跟ADO.NET连接到数据库的步骤是一样的,ADO.NET是利用 SqlConnection连接数据库,而MongoDB则使用MongoClient连接,并在构造函数中将连接字符传递进去,当然可以不传递,那么默 认就是连接本地的计算机的默认端口(27017),比如下面的三种连接方式:

1 var client = new MongoClient();
2 
3 var client1 = new MongoClient("mongodb://localhost:27017"); 4 5 var client2 = new MongoClient("mongodb://localhost:27017,localhost:27018,localhost:27019");

获取数据库

为了获取数据库,只需要调用MongoClient对象的GetDatabase方法,并传入数据库名称即可,如果数据库存在则直接返回,否则就创建该数据库并返回,比如下面的这段代码将创建名为“foo”的数据库:

var database = client.GetDatabase("foo");

现在database变量就指向了foo数据库了。

获取链表

虽然叫获取链表,但是实际上就是获取数据库中的表,我们可以通过上面database的GetCollection<TDocument>方法获取,比如下面的代码我们将获取一个名为“bar”的表:

var collection = database.GetCollection<BsonDocument>("bar");

我们传入的泛型参数为BsonDocument,这个是自带的,可以动态的容纳各种格式的数据,当然这里还是建议读者使用POCO。

插入一个文档

利用collection对象,我们可以将文档插入其中,比如下面的json格式数据:

{"name": "MongoDB","type": "database","count": 1,"info": {x: 203, y: 102 } }

下面我们利用BsonDocument对象组织上面的JSON格式的数据:

var document = new BsonDocument
{{"name","MongoDB"}, {"type","Database"}, {"count",1}, {"info",new BsonDocument{ {"x",203}, {"y",102} } } };

然后我们利用collection对象的InsertOneAsync将上面的数据插入其中:

collection.InsertOneAsync(doc);

我们都知道Async为后缀的方法都是支持异步的,但是笔者是在控制台项目中演示的所以没有加上这个await,如果读者实在其他的环境中测试的可以根据情况加上。

插入多个文档

如果需要一次性插入多个文档,我们可以通过InsertManyAsync方法,比如下面的示例我们将插入100条数据:

var documents = Enumerable.Range(0, 100).Select(x => new BsonDocument("counter", x)); collection.InsertManyAsync(documents);

统计文档数量

通过上面的步骤我们已经插入了101条数据,如果在实际开发中我们需要统计数据的数量就可以通过调用CountAsync方法,比如下面的代码:

var count = collection.CountAsync(new BsonDocument());
Console.WriteLine(count.Result);

查询链表

利用Find方法我们可以对链表进行查询,Find方法将返回给我们IFindFluent<TDocument,TProjection>对象,该接口属于链式接口,所以能够提供给我们类似jquery那样的链式变成方式去控制查询操作。

查询链表首条数据

为了获取第一条数据我们可以通过调用FirstOrDefaultAsync方法,该方法会返回第一条数据,如果不存在数据则会返回null,比如下面的代码将会显示链表中的第一条数据:

var firstDoc = collection.Find(new BsonDocument()).FirstOrDefaultAsync();
Console.WriteLine(firstDoc.Result.ToString());

如果读者注意最后的输出,会发现一个_id字段,但是我们并没有插入这个字段,这个字段是mongoDB自动加入的,相信很多人都知道它的作用,这里就不详细解释额。

查询链表中所有数据

如果想将链表中所有的数据都返回可以在Find操作之后调用ToListAsync方法就可以,将会直接返回List<T>类型的结果,比如下面的这段代码:

var documents = collection.Find(new BsonDocument()).ToListAsync().Result;

针对数量较少的数据情况下,上面这种方式是没有问题,但如果我们需要处理大量的数据,那么我们就不能使用上面的这种方式,就需要利用下面的方式,通过ForEachAsync来完成,因为这个方法会在每条数据返回的时候执行一个回调,从而达到并发处理的目的,比如下面这段代码就演示了如何使用:

collection.Find(new BsonDocument()).ForEachAsync(x => Console.WriteLine(x));

通过条件查询单条数据

我们可以在调用Find方法的时候传入一个过滤条件,从而在链表中查询我们希望的数据,比如下面这个例子我们将查询字段“counter”的值为71的数据:

var filter = Builders<BsonDocument>.Filter.Eq("counter", 71); var document = collection.Find(filter).FirstAsync().Result; Console.WriteLine(document);

这里我们需要通过Builders的静态对象Filter中的各种条件方法来构造条件,然后在调用Find方法的将其传入即可。

通过条件查询多条数据

我们也可以获取多条数据,比如下面这个例子,我们将搜索出所有“counter”的值大于50的数据:

var filter = Builders<BsonDocument>.Filter.Gt("counter", 50); var document = collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));

当然我们也可以给定一个范围,比如50到70之间:

var filterBuilder = Builders<BsonDocument>.Filter;
var filter = filterBuilder.Gt("counter", 50) & filterBuilder.Lt("counter", 70); collection.Find(filter).ForEachAsync(x => Console.WriteLine(x));

对数据排序

下面我们将在查询的基础之上加上排序,排序只需要在在调用Sort方法时传入对应的参数即可,比如下面的例子,我们将对链表先进行查询,然后排序:

var filter = Builders<BsonDocument>.Filter.Exists("counter");
var sort = Builders<BsonDocument>.Sort.Descending("counter"); var documnt = collection.Find(filter).Sort(sort).FirstAsync().Result;

对字段投射

许多时候我们并不需要文档中的所有数据,这就好比在SQL中我们都会只把我们需要的数据select出来,而不会把表中的所有字段的数据都拿出来,自然MongoDB也可以让我这样做,我们只需要跟过滤和排序一样利用Projection构造器来构造然后传递给Project方法中就可以了,下面这个例子中我们将排除“_id”字段:

var projection = Builders<BsonDocument>.Projection.Exclude("_id");
var document = collection.Find(new BsonDocument()).Project(projection).FirstAsync().Result; Console.WriteLine(document);

更新文档

MongoDB拥有很多更新操作,下面我们将会介绍几个简单的并且常用的更新操作。

如果我们需要更新一个对象(如果条件不匹配那么可能是0条),可以使用UpdateOneAsync方法,并执行过滤条件和需要更新到的文档,比如下面我们将“counter”为1的数据中的“counter”更新为110:

var filter = Builders<BsonDocument>.Filter.Eq("counter", 1); var updated = Builders<BsonDocument>.Update.Set("counter", 110); var result = collection.UpdateOneAsync(filter, updated).Result;

如果我们需要批量的更新,我们可以调用UpdateManyAsync即可。比如我们需要将“counter”小于10的数据中的“counter”累加100,那么我们就可以像下面这样来写:

var filter = Builders<BsonDocument>.Filter.Lt("counter", 10); var updated = Builders<BsonDocument>.Update.Inc("counter", 100); var result = collection.UpdateManyAsync(filter, updated).Result;

删除文档

作为基础部分这也是最后一个部分了,利用上面的过滤,然后调用DeleteOneAsyncDeleteManyAsync方法就可以了,比如下面的列子就是删除“counter”大于100的所有数据:

var filter = Builders<BsonDocument>.Filter.Gt("counter", 100); var resut = collection.DeleteManyAsync(filter).Result;

相关文章:

李宏毅机器学习自己的笔记(一)----------Introduction of MachineLearning

视频来源&#xff1a;李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p2 声明&#xff1a;图片均来自于视频截图 问题一&#xff1a; AI&#xff0c;机器学习 &#xff0c;深度学习关系 答&#xff1a;AI人工智能…

Unity从零开始构建能力体系 Unity Ability System

从零开始构建能力体系 你会学到什么 如何实施能力体系 如何使用用户界面工具包创建用户界面 如何使用Unity的GraphView API 如何实现保存系统 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根…

mybatis-plus对datetime返回去掉.0_华为AI认证-TensorFlow2.0编程基础

参考《HCIA-AI2.0培训教材》《HCIA-AI2.0实验手册》认证要求&#xff1a;了解TensorFlow2.0是什么以及其特点掌握TensorFlow2.0基础和高阶操作方法熟悉TensorFlow2.0中的Keras API简介&#xff1a;TensorFlow是目前最为流行的深度学习框架&#xff0c;是人工智能领域的第一主要…

dev c++ 调试时候发生软件崩溃解决办法

dev c 调试时候发生软件崩溃解决办法 安装好dev cpp&#xff0c;准备调试的时候发现软件崩溃&#xff0c;这种情况很好解决。只要在工具菜单中点开编译选项&#xff0c;找到代码生成/优化一栏&#xff0c;将链接器的“产生调试信息”选项改为yes&#xff0c;即可

运行hadoop fs -ls 命令显示本地目录问题

2019独角兽企业重金招聘Python工程师标准>>> 运行hadoop fs -ls 命令显示本地目录问题 问题原因&#xff1a;是因为在hadoop配置文件中没有指定HDFS的默认路径 解决办法&#xff1a;有两个办法 1、使用HDFS全路径访问 hadoop fs -ls hdfs://192.168.1.1:9000/ 2…

李宏毅机器学习笔记(二)-------Why we need learn Machine Learning?

视频&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibilihttps://www.bilibili.com/video/av10590361/?p2 真是一个逗波&#xff1a; AI训练师&#xff1a; 为AI选择合适的model和损失函数。然后达到最好的功能

mixamo网站FBX模型带骨骼绑定动作库

mixamo网站FBX模型带骨骼绑定动作库&#xff0c;unity游戏各职业人物动画&#xff0c;兼容3dmax maya c4d iclone blender等主流3D软件 mixamo游戏3D模型带骨骼绑定FBX动作库 大小解压后&#xff1a;17.2G 素材获取&#xff1a;mixamo网站FBX模型带骨骼绑定动作库-云桥网

java modbus通讯协议_物联通讯协议一(Modbus)

1、Modbus是一种串行通信协议&#xff0c;是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto)&#xff0c;并且现在是工业电子设备之间常用的连接方式。2、Modbus是一种串…

hibernate3

hibernate3 &#xff08;整合到spring中的core核心配置中的hibernate3&#xff09; <!-- 基于hibernate的Session工厂 --><bean id"sessionFactory"class"org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><!…

伦理困境:人工智能浪潮与“AI威胁论”之争

首先&#xff0c;何为伦理&#xff1f; 2018年1月份的《科学与社会》报刊中有如下阐述&#xff1a; 伦理一词&#xff0c;英文为ethics&#xff0c;一词源自于希腊文的“ethos”&#xff0c;其意义与拉丁文“mores”差不多&#xff0c;表示风俗、习惯的意思。西方的伦理学发展流…

在 ASP.NET 网页中不经过回发而实现客户端回调

一、使用回调函数的好处 在 ASP.NET 网页的默认模型中&#xff0c;用户会与页交互&#xff0c;单击按钮或执行导致回发的一些其他操作。此时将重新创建页及其控件&#xff0c;并在服务器上运行页代码&#xff0c;且新版本的页被呈现到浏览器。但是&#xff0c;在有些情况下&…

李宏毅机器学习笔记(三)——Regression: output a scalar amp;amp; Gradient Descent

视频来源&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p3机器学习的目的就是找到最优函数&#xff0c;而回归的目的就是我们要找的函数的输出是一个数值。例如下面的例子&#xff0c;不管是输入怎样的…

完整的虚幻引擎超级课程:从初学者到专家

通过这个循序渐进的课程&#xff0c;学习如何像专业人士一样开发游戏和设计&#xff01; 你会学到什么 如何使用虚幻引擎及其元素 电子游戏力学原理 平衡计分卡几何原理 蓝图脚本的原则 如何设计、开发和编写你的关卡来复制你最喜欢的游戏 流派:电子学习| MP4 |视频:h264&…

atitit.userService 用户系统设计 v5 q330

atitit.userService 用户系统设计 v5 q330 1. 新特性1 2. Admin login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> 商家注册2 3.2. <!-- 会员登录使用 -->3 3.3. <!-- 会员退出登录 -->3 3.4. <!-- 进入会员首页 -->3 3.5. <!-- 进入会员信…

python打包为exe文件_Pyinstaller(python打包为exe文件)

需求分析&#xff1a; python脚本如果在没有安装python的机器上不能运行&#xff0c;所以将脚本打包成exe文件&#xff0c;降低脚本对环境的依赖性&#xff0c;同时运行更加迅速。 当然打包的脚本似乎不是在所有的win平台下都能使用&#xff0c;win7有一部分不能使用&#xff0…

从风投看中国IT行业的发展

创业相关电视剧中经常会出现一个词“风投”&#xff0c;例如主角创业艰辛&#xff0c;得到了风投的帮助&#xff0c;从而走向了人生巅峰。而“风投”并不是一家企业&#xff0c;它是由无数风险投资公司一同组成的行业&#xff0c;今天就带大家了解一下风投与中国IT行业的紧密联…

c++ 字母排序

char a[123] {Z, s, p, l, j, r, q, v, n, m, C, F, D, B, A, 2, 0, Z, };for (int i 0; i < strlen(a); i){//字母排序for (int j i 1; j < strlen(a); j){if (a[j] < a[i]){char pTem a[j];a[j] a[i];a[i] pTem;}}}printf("%s\n", a); 版权声明&a…

李宏毅笔记机器学习(四)——Regression——Demo

视频来源&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p4 重点&#xff1a; &#xff08;1&#xff09;调节lr&#xff08;learning rate步长&#xff09;&#xff0c;lr参数的调节。迭代次数为1000次…

Blender 3.0机器人硬面建模材质渲染全流程学习课程

学习在Blender中建模硬表面机器人角色 你会学到什么 Blender 3.0建模工具 Blender 3.0硬面人物造型 机器人角色的UV展开 如何在Blender中渲染 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;…

python抓包工具_「docker实战篇」python的docker爬虫技术-fiddler抓包软件详细配置(七)...

挑选常用的功能给各位老铁介绍下。 fiddler第一次进入fiddlerfiddler会请求fiddler的官网&#xff0c;检查更新操作布局分布 工具栏File -capture traffic开启爬虫File -new Viewer新建立一个窗口File - save保存all session&#xff0c;request方式&#xff0c;reponse的方式z…

loadrunner支持https协议的操作方法-经验总结

问题&#xff1a;用户portal支持https协议&#xff0c;用loadrunner录制登陆脚本时发现未录制到用户名和密码 录制到的脚本如下&#xff1a; login() { lr_think_time(10); web_url("verifycode.jsp", "URLhttps://192.168.211.246:56661/portal/common/jsp/ver…

初试linux编译(ubuntu+vim)+玩转智能蛇

一.初试linux编译&#xff08;ubuntuvim&#xff09; 步骤&#xff1a; ①下载vmware15ubuntu桌面版映像 ②安装ubuntu ③下载vimgcc 在ubuntu终端输入&#xff1a; sudo apt-get install vim-gtk sudo apt-get install gcc④安装完毕后进行编译测试 1&#xff09;新建hellow…

shell学习之路:流程控制(if)

1.单分支if条件语句 1 if [ 条件判断式 ];then 2 程序 3 fi 4 或者 5 if [ 条件判断式 ] 6 then 7 程序 8 fi 注意事项: 1.if语句使用fi结尾&#xff0c;和一般语言使用大括号结尾不同 2.[ 条件判断式 ]就是使用test命令判断&#xff0c;所以中括号和条件判断式…

李宏毅机器学习笔记(五)-----Where does the error come from

视频来源&#xff1a; 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p5 function set model error来源&#xff1a; &#xff08;1&#xff09;baise &#xff08;2&#xff09;variance问题一&#xff1a; 怎么…

Blender三维建筑场景动画制作学习教程

一起在Blender中创建一个三维低多边形场景动画 你会学到什么 这门课程是为那些喜欢在工作流程中成长的艺术家设计的 初学者 想学会让自己的资产活起来的艺术家。 希望扩展其技能集的游戏开发人员。 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#x…

springcloud 组件_SpringCloud组件mica 2.0.5发布,添加对sentinel、undertow指标收集

一、mica&#xff08;云母&#xff09;mica 由如梦技术内部的 lutool&#xff08;撸秃&#xff09; 演变而来。lutool 诞生于 2017 年&#xff0c;受 jhipster 启发逐步形成一个微服务的核心集。因 lutool 名称与功能不太符合&#xff0c;故在2019年开源时将其改名为 mica&…

access order by 判断是否除数为0

order by IIF(dz>0,yj/dz,0) desc转载于:https://www.cnblogs.com/slyzly/p/5379482.html

vm无网络解决方法

编辑-虚拟网络编辑器-还原默认

十五天精通WCF——第八天 对“绑定”的最后一点理解

转眼已经中断10几天没有写博客了&#xff0c;也不是工作太忙&#xff0c;正好碰到了端午节&#xff0c;然后最近看天津台的爱情保卫战入迷了。。。太好看了&#xff0c;一直都是回味无穷。。。而且 涂磊老师话说的真是tmd的经典&#xff0c;然后就这样耽搁了&#xff0c;好了&a…

2018年目标

2018年又一个新的开始2018年的学习目标&#xff1a; &#xff08;1&#xff09;每天学习算法和Python。尝试用Python写出不同的算法 &#xff08;2&#xff09;每天完成一篇CSDN专栏大数据相关 &#xff08;3&#xff09;每天进步一点点的打卡完成 &#xff08;4&#xff09;集…