Mongodb常规操作【一】
Mongodb是一种比较常见的NOSQL数据库,数据库排名第四,今天介绍一下Net Core 下,常规操作。
首先下C# 版的驱动程序 “MongoDB.Driver”,相关依赖包自行引用进来。 过于细节的基础知识就不讲了,直接就奔主题了
using MongoDB.Driver; //命名空间 MongoClient client = new MongoClient("mongodb://192.168.99.5"); IMongoDatabase dbBase = client.GetDatabase("School");
Mongodb有一个特性,你可以不用先建数据库和集合,数据库会自行检查,如果没有就新建。
IMongoCollection<> collection = dbBase.GetCollection<>("Class"); //获取集合
GetCollection是一个泛型方法,你可以输入BsonDocument,或者实体,Mongodb驱动程序会自动帮你序列化
IMongoCollection<BsonDocument> collection = dbBase.GetCollection<BsonDocument>("Class");
public class Class { public BsonObjectId Id { set; get; } public string ClassName { set; get; } public List<Student> StudentItems { set; get; } } public class Student { public string Name { set; get; } public int Age { set; get; } public string Sex { set; get; } } IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class");
如果你使用BsonDocument,那么你会得么一个BsonDocument对象,Mongodb驱动程序内置了序列化方法,方便将BsonDocument转换成实体对象。
using MongoDB.Bson.Serialization;//命名空间 var schoolClass = BsonSerializer.Deserialize<Class>(new BsonDocument());
Mongodb驱动程序支持Linq 语法,你可以借此写出优雅语句。
var schoolClass = collection.Find(n => n.ClassName == "一年级").FirstOrDefault(); var schoolClass2 = collection.AsQueryable<Class>().Where(n => n.ClassName == "一年级").FirstOrDefault(); var schoolClass3 = collection.Find(new BsonDocument("ClassName", "一年级")).FirstOrDefault();
Mongodb驱动程序还支持异步方法,根据命名约定,很多方法相应的Async结尾的,都是异步方法。
var schoolClass = await collection.Find(n => n.ClassName == "一年级").FirstOrDefaultAsync(); var schoolClass2 = await collection.AsQueryable<Class>().Where(n => n.ClassName == "一年级").FirstOrDefaultAsync(); var schoolClass3 = await collection.Find(new BsonDocument("ClassName", "一年级")).FirstOrDefaultAsync();
基本介绍完毕,下面进入增删更改的操作方法。
---------------------------增加---------------------------------
IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class");
//写入单个 collection.InsertOne(new Class { ClassName = "二年级", StudentItems = new List<Student> { ,Name="李明",Sex="男" }, ,Name="小红",Sex="女" } } }); //批量写入 collection.InsertMany(new List<Class> { new Class { ClassName = "二年级", StudentItems = new List<Student> { ,Name="李明",Sex="男" }, ,Name="小红",Sex="女" } } } });
IMongoCollection<BsonDocument> collection = dbBase.GetCollection<BsonDocument>("Class"); //写入单个 collection.InsertOne(new BsonDocument { {"ClassName","二年级" }, {"StudentItems",new BsonArray{ },{ "Name", "李明" },{ "Sex", "男" } } } } }); //批量写入 collection.InsertMany(new List<BsonDocument> { new BsonDocument { {"ClassName","二年级" }, {"StudentItems",new BsonArray{ },{ "Name", "李明" },{ "Sex", "男" } } } } }, new BsonDocument { {"ClassName","二年级" }, {"StudentItems",new BsonArray{ },{ "Name", "李明" },{ "Sex", "男" } } } } } });
不过,使用C#语言,我还是尽量推荐使用实体来添加,可读性,维护性也强。也有缺点,JSON结构如果使用实体话,类库较大,庆幸的Mongodb驱动程序可以帮你序列化。
BsonDocument结构虽然符合JSON,用起来却很痛苦,不过也减少类库的数量。
---------------------------删除---------------------------------
IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class"); //删除单个 collection.DeleteOne(n => n.ClassName == "二年级");//使用拉姆达表达式 collection.DeleteOne(new BsonDocument("ClassName", "二年级"));//使用BsonDocument var filter = Builders<Class>.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb9")); collection.DeleteOne(filter);//使用Builders, //批量删除 collection.DeleteMany(n => n.ClassName == "二年级"); collection.DeleteMany(new BsonDocument("ClassName", "二年级")); collection.DeleteMany(filter); //删除并返回 collection.FindOneAndDelete(n => n.ClassName == "三年级");
IMongoCollection<BsonDocument> collection = dbBase.GetCollection<BsonDocument>("Class"); //删除单个 collection.DeleteOne(new BsonDocument("ClassName", "二年级"));//使用BsonDocument var filter = Builders<BsonDocument>.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb9")); collection.DeleteOne(filter);//使用Builders, //批量删除 collection.DeleteMany(new BsonDocument("ClassName", "二年级")); collection.DeleteMany(filter); //删除并返回 collection.FindOneAndDelete(new BsonDocument("ClassName", "二年级"));
使用BsonDocument,就不能使用酷酷的拉姆达表达式了,其它的差不多。
---------------------------更改---------------------------------
IMongoCollection<Class> collection = dbBase.GetCollection<Class>("Class"); //修改单个 var filter = Builders<Class>.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb8")); var update = Builders<Class>.Update.Set("ClassName", "三年级"); var update2 = Builders<Class>.Update.Set(n => n.ClassName, "三年级"); collection.UpdateOne(n => n.ClassName == "二年级", update);//使用拉姆达表达式 collection.UpdateOne(filter, update2);//使用Builders //批量修改 collection.UpdateMany(n => n.ClassName == "二年级", update); collection.UpdateMany(filter, update2); //替换 var schoolClass = collection.Find(n => n.ClassName == "二年级").FirstOrDefault(); collection.ReplaceOne(n => n.ClassName == "二年级", schoolClass);
使用BsonDocument 也是相应差不多,我就不贴出代码了。
修改数组,则大概如下
//数组增加一个 , Name = "张明", Sex = "男" }); collection.UpdateOne(n => n.ClassName == "三年级", update); //数组减少一个 , Name = "张明", Sex = "男" }); collection.UpdateOne(n => n.ClassName == "三年级", update2); //数组修改一个 ); collection.UpdateOne(n => n.ClassName == ), update3); , Name = "张明", Sex = "男" }); collection.UpdateOne(n => n.ClassName == ), update4);
示例是筛选过,不能每种写法写出来,读者自行试尝组合
---------------------------查询---------------------------------
var shoolClass = collection.Find(n => n.ClassName == "三年级").FirstOrDefault();//使用拉姆达表达式 var shoolClassItems = collection.Find(n => n.ClassName == "三年级").ToList(); var shoolClass2 = collection.Find(new BsonDocument("ClassName", "三年级")).FirstOrDefault(); var shoolClassItems2 = collection.Find(new BsonDocument("ClassName", "三年级")).ToList(); var filter = Builders<Class>.Filter.Eq(n => n.ClassName, "三年级");//使用Builders var shoolClass3 = collection.Find(filter).FirstOrDefault(); var shoolClassItems3 = collection.Find(filter).ToList();
Mongodb的基本应用,就讲解完毕,笔记一下
Mongodb常规操作【一】的更多相关文章
- mongodb常规操作语句
db.c_user.insertOne({ name: "ljm", pwd: "123456" }); //插入一个 db.c_user.insertMany ...
- mongodb基础整理篇————常规操作[二]
前言 简单整理一下常规操作. 正文 虽然一般说写代码看的是思想,但是呢,如果不知道mongodb 有哪些常用的操作,那么你怎么能知道mongodb是否符合你的需求,比如说如果聚合功能都没有,你得自己写 ...
- MongoDB查询操作限制返回字段的方法
这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下 映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中 ...
- EasyUI-datagrid数据展示+MongoDB数据操作
使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...
- Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...
- FTP服务器常规操作
导读 FTP协议是Internet文件传输的基础,它是由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.下面就由我给大家简单介绍一下 ...
- Apache服务器常规操作
导读 Apache是世界上排名第一的Web服务器,50%以上的Web服务器都在使用Apache,它几乎可以在所有计算机平台上运行.下面就由我给大家说说Apache服务器的一些常规操作. Apache服 ...
- mysql服务器的常规操作
mysql服务器的常规操作 导读 MySQL是一个小型关系数据库管理系统,目前被广泛的应用在Internet上的中小型网站中,体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,使得许多中小型网站 ...
- 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...
随机推荐
- tensorflow MNIST新手教程
官方教程代码如下: import gzip import os import tempfile import numpy from six.moves import urllib from six.m ...
- <转> Libvirt学习总结
感谢朋友支持本博客.欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/gaoxingnengjisua ...
- 泛泰A870(高通APQ8064t 600 cpu) Mokee4.4.2(Android4.4) 图赏
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3lob3N0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- CentOS 6.5 安装MySQL过程
使用软件的版本 CentOS 6.5 mysql-5.5.22.tar.gz cmake-2.8.6.tar.gz 准备工作 解压安装mysql之前把关于mysql软件包卸载,以免程序冲突,端口冲突. ...
- 自学Zabbix3.8.3-可视化Visualisation-Screens
自学Zabbix3.8.3-可视化Visualisation-Screens 在Zabbix屏幕上,您可以将来自不同来源的信息分组,以快速浏览单个屏幕.构建屏幕非常简单直观.本质上,屏幕是一个表.您可 ...
- intelli idea中配置Tomcat找不到的解决办法
这两天新入职一家公司,公司用的是intelli idea,以前用习惯了eclipse,感觉到有点不太习惯,当然,intelli idea也有自己的强大之处.在开始配置Tomact之前,按照网上的说法, ...
- Net Core中数据库事务隔离详解——以Dapper和Mysql为例
Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...
- ed命令
- [C#]使用Redis来存储键值对(Key-Value Pair)
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.5及以 ...