.Net中MoongoDB的简单调用图文教程

前言

本文主要给大家介绍了关于.Net中MoongoDB调用的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

方法如下:

1、安装.Net 驱动:Install-Package MongoDB.Driver

2、数据插入 ,链接数据库

//新建Person测试类
 public class Person
 {
  public long Id { get; set; }
  public int Age { get; set; }
  public string Name { get; set; }
  public int Height { get; set; }
  public TestPerson t1{ get; set; }
 }
 public class TestPerson {
  public string Name { get; set; }
 }
 public class ObjectPerson {
  public ObjectId Id { get; set; }
  public int Age { get; set; }
  public string Name { get; set; }
  public int Height { get; set; }
 }
MongoClient client = new MongoClient("mongodb://127.0.0.1");
 IMongoDatabase database = client.GetDatabase("TestDb");//相当于数据库
 IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相当于表
 Person p1 = new Person()
 {
 Id = 2,
 Name = "test1",
 Age = 29,
 Height=130
 };
 collection.InsertOne(p1);//单条插入也支持异步方法,后面建议都用异步的!习惯成自然!

回到客户端工具刷新一下,就能看到新插入的数据,MongoDB 会自动创建“数据库” 以及 Collection(约等于“表”)。MongoDB 默认用 id 做主键,因此不用显式指定 id 是主键。

MongoDB 中没有内置“自增字段”,可以把 Id 声明为 ObjectId 类型(using MongoDB.Bson) 这样插入以后就自动给字段赋值。

 //多条插入
 IMongoCollection<ObjectPerson> collection1 = database.GetCollection<ObjectPerson>("ObjectPersons");//大致相当于表
 List<ObjectPerson> persons = new List<ObjectPerson>() { new ObjectPerson() { Name = "test2", Age = 30, Height = 135 }, new ObjectPerson() { Name = "test3", Age = 31, Height = 140 } };
 collection1.InsertMany(persons);//多条插入

MongoDB 是用 json 保存的,因此也可以直接以 json 格式插入,用 BsonDocument 来代表:

IMongoCollection<BsonDocument> dogs = database.GetCollection<BsonDocument>("Dogs");
string jsondata = "{id:8999,Age:81,Name:'japan',gender:true}";
BsonDocument p2 = BsonDocument.Parse(jsondata);
dogs.InsertOne(p2);

还可以插入有嵌套关系的对象,比如学生和老师,注意不会有表间关系,都是存到一个集合中,注意和关系库不一样。

IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");//大致相当于表
Person p1 = new Person()
{
 Id = 2,
 Name = "test1",
 Age = 29,
 Height=130,
 t1=new TestPerson() { Name="222"}
};
 collection.InsertOne(p1);//单条插入

3、MongoDB查询

IMongoCollection<Person> collection = database.GetCollection<Person>("Persons");
var filter = Builders<Person>.Filter.Gt(p => p.Age,5);
var filter1 = Builders<Person>.Filter.And(Builders<Person>.Filter.Gt(p => p.Age, 5), Builders<Person>.Filter.Eq(p => p.Id, 1));// And 并且 还有or方法
var filter2 = Builders<Person>.Filter.Where(p => p.Age > 5 && p.Id == 1);//和上面的写法是一样的但是,建议用Where方法
 //普通查询
var result= collection.Find(filter).ToList();
foreach (var item in result)
{
 Console.WriteLine(item.Age + item.Name);
}

除了 Gt,还有 Gte、In、Lt、Lte、Ne、Nin、Near、NearSphere、Or、Where、And、Not。 当然最常用的还是 Where 操作:

异步查询

//异步查询
 using (IAsyncCursor<Person> personsCursor = await collection.FindAsync<Person>(filter)) {
 while (personsCursor.MoveNextAsync().Result)//获取下一组数据,相当于是否有指针,MongoDB其实是返回一个组,不像sql每次是一次次取
 {
 IEnumerable<Person> items = personsCursor.Current;//返回当前组的数据
 foreach (var item in items)
 {
  Console.WriteLine(item.Age + item.Name);
 }
 }
 //如果数据量不大,可以直接tolist
 var results = personsCursor.ToList();
}

为什么 FindAsync 不直接返回集合,而是要 MoveNext 之后返回一个集合呢?因为返回 的数据量可能很大,因此 MongoDB 是分批下载,下载一批之后执行 GET_More 操作返回下 一批。可以通过 FindOptions 参数的 BatchSize 设置每一批的大小。

如果确认返回的数据量 不大,可以 var ps = await personsCursor.ToListAsync()(或者 ToEnumerable()等)一下子返回所有数据。还有 Any、First、FirstOrDefault 等以及异步操作。需要注意 MongoDB 中查询区分大小写。

4、分页查询

//分页
FindOptions<Person, Person> findop = new FindOptions<Person, Person>();
findop.Limit = 3;//取最多几条
findop.Skip = 2;//跳过几条
findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);//排序
using (var cursor = collection.FindAsync(filter, findop).Result)
{
 var items = cursor.ToList();
 foreach (var item in items)
 {
 Console.WriteLine(item.Age + item.Name);
 }
}

指定排序规则 findop.Sort = Builders<Person>.Sort.Ascending(p => p.Age).Ascending(p => p.Name);

5、Json格式取法

//json格式取法
IMongoCollection<BsonDocument> bsonDoc = database.GetCollection<BsonDocument>("Persons");
var filter4 = Builders<BsonDocument>.Filter.Gt("Age", 5);
using (var persons=await bsonDoc.FindAsync(filter4))
{
 foreach (var item in await persons.ToListAsync())
 {
 Console.WriteLine(item.GetValue("Name").AsString);
 }
}

6、Update更新操作

IMongoCollection<Person> upPersons = database.GetCollection<Person>("Persons");
var upFilter = Builders<Person>.Filter.Where(p => p.Age>20);//筛选条件
var update = Builders<Person>.Update.Set(c => c.Name, "test2");//更新条件,将Name更新成test2
upPersons.UpdateMany(filter, update);

7、Delete删除操作

IMongoCollection<Person> teachers = database.GetCollection<Person>("Persons");
var deletefilter = Builders<Person>.Filter.Where(p => p.Id == 1);
teachers.DeleteMany(deletefilter);

用 Update 机会比较少,如果频繁的用 Update 可能意味着用错了;也不要想着 join、group by, 还是场景不对!

8、MongoDB 应用场景

日志记录系统;设备监控数据的存储;饿了么外卖骑手接单; 存储商品、商家信息;网站评论信息;存储爬虫爬过来的第三方数据;

但是像订单、金融交易、游戏装备等这些关键信息不要用 MongoDB;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • .Net中MoongoDB的简单调用图文教程

    前言 本文主要给大家介绍了关于.Net中MoongoDB调用的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下: 1.安装.Net 驱动:Install-Package MongoDB.Driver 2.数据插入 ,链接数据库 //新建Person测试类 public class Person { public long Id { get; set; } public int Age { get; set; } public string Name { get; s

  • mac 中docker安装mysql的图文教程

    今天在Docker中安装了MySQL ,是自己打的docker包. 首先新建Dockerfile 内容如下: FROM mysql:latest MAINTAINER abel.yang <527515025@qq.com> LABEL Descripttion="This image is build for MAC to use mysql" Vendor="GitHub" Version="latest" RUN apt-get

  • win10下虚拟机中安装Mac系统的图文教程

    一.下载虚拟机15.5.1版本 我从官网上直接下载的最新版这样在安装Mac10.14和Catalina都行,之前用的15.0的版本安装Catalina是失败的.安装VM,等待安装完成. 二.下载Unlocker3.0 Unlocker是对虚拟机进行解锁的一款工具,不进行解锁是找不到Mac安装选项的.运行win-install等待完成就可以了. 三.安装Mac系统 此过程就直接上图了: 四.安装tools tools是VM的扩展文件可以实现虚拟机中系统全屏,与物理机间文件拖拽. 接下来,双击"安装

  • 在IIS 7中配置PHP运行环境简单步骤[图文教程]

    安装 IIS 7.0 打开 Control Panel\Programs\Programs and Features\Turn Windows features on or off, 在打开的对话框中勾选上这两个选项: 单击OK等待片刻, IIS就安装完成了. 安装 PHP 5.2.6 1. 下载: PHP 5.2.6 ;  其它版本的 PHP 下载. 2. 将压缩包解压, 放到一个目录中, 比如 D:\php 3. 将 php.ini-dist 复制到 C:\Windows 目录下并改名为 p

  • C# WCF简单入门图文教程(VS2010版)

    在这个例子中我们将使用VS2010创建一个WCF服务,其中会了解[DataContract][ServiceContract]等特性. 内置的WCFSVCHost,并使用"WCF测试客户端"来测试我们创建的服务. 注意下面的所有类.接口及方法都添加了public的访问级别. 一.建立一个WCF服务库 创建一个WCF服务库项目 在解决方案中会自动为我们生成两个类文件"IService1.cs"和"Service1.cs". 这两个类文件是两个WCF

  • dedecms 制作模板中使用的全局标记图文教程

    如果这个官方的模板解释看的太抽象的,可以 参考一下: 解析引擎概述  模板设计规范  代码参考标记参考: arclist(artlist,likeart,hotart,imglist,imginfolist,coolart,specart) field channel mytag vote friendlink mynews loop channelartlist page list pagelist pagebreak fieldlist ---------------------------

  • .NET Core 3.0中WPF使用IOC的图文教程

    前言 我们都知道.NET Core 3.0已经发布了第六个预览版,我们也知道.NET Core 3.0现在已经支持创建WPF项目了,刚好今天在写一个代码生成器的客户端的时候用到了WPF,所以就把WPF创建以及使用IOC的过程记录一下,希望能对大家有所帮助.当然文章实例我就以我曾阅读过的一篇文章的示例代码来进行演示了. 步骤 1.通过命令行创建wpf项目,当然你也可以通过vs2019来进行创建.具体的步骤就不演示了,当然,如果你还不会用vs2019创建项目,那么请你右上角关闭网页,省的烦心. ❯

  • windows server 2008 R2中IIS FTP安装部署图文教程

    windows server 2008 R2中IIS FTP安装部署教程,供大家参考,具体内容如下 1.登陆系统,进入开始——>管理工具——>服务器管理 2.选中“角色”——>“ 添加角色” 3.在“添加角色向导”中操作 注:在这里会等待1到5分钟不等. 添加角色完毕. 4. 进入IIS界面 1) 服务器管理器——>角色——>web服务器(IIS)——>Internet 信息服务(IIS),点击进入 2) 开始——>管理工具——>Internet 信息服务(

  • Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7(图文教程)

    一. VMware简介: VMware是一个虚拟PC的软件,可以在现有的操纵系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC,以此来实现在一台机器上真正同时运行两个独立的操作系统. VMware的主要特点: 不需要区分或重新开机就能在同一台PC上使用两种以上的操作系统: 本机系统可以与虚拟机系统网络通信: 可以设定并且随时修改虚拟机操作系统的硬件环境. VMware Workstation10.0.3下载地址:http://www.jb51.net/softs/102992.html 二.

  • linux常用命令之VMware10中安装CentOS 6.4图文教程

    小编用过的Linux系统也就是现在主流的企业级linu系统RedHat跟CentOS,这边主要介绍下CentOS 6.4的安装RedHat和CentOS差别不大,CentOS是一个基于RedHatLinux 提供的可自由使用源代码的企业级Linux发行版本. CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RED HAT那样需要花钱购买支持服务! 首先安装VMware Workstation这边就不多介绍了,可自行google或者度娘! 下面开始介绍安装过程 第一步,文件 → 新

随机推荐