C#简单操作MongoDB的步骤全纪录

作者:陈惊蛰 时间:2023-06-25 06:52:40 

前言

MongoDB是一款由C++编写的高性能、开源、无模式的常用非关系型数据库产品,是非关系数据库当 * 能最丰富、最像关系数据库的数据库。它扩展了关系型数据库的众多功能,例如:辅助索引、范围查询、排序等。

MongoDB主要解决的是海量数据的访问效率问题,它作为分布式数据崛起后,使用较多的一款非结构数据库,必然有其值得称道之处,它的主要功能特性如下:

1)面向集合的存储,适合存储对象及JSON形式的数据。

2)动态查询,MongoDB支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

3)完整的索引支持,包括文档内嵌对象及数组。MongoDB的查询优化器会分析查询表达式,并生成一个高效的查询计划。

4)查询监视,MongoDB包含一个监视工具用于分析数据库操作的性能。

5)复制及自动故障转移,MongoDB数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。

6)高效的传统存储方式,支持二进制数据及大型对象(如图片或视频)。

7)自动分片以支持云级别的伸缩性,自动分片功能支持水平的数据库集群,可动态添加额外的机器。

本文主要给大家介绍了关于C#操作MongoDB的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

一 安装MongoDB

官网按需下载, 安装, 一步到位.

二 VS创建新项目

创建一个.netcore console项目, 然后nuget安装驱动MongoDB.Driver

三 建立连接

Program.Main函数中添加代码


var client = new MongoClient("mongodb://127.0.0.1:27017");
var database = client.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");

三个对象, client是连接数据库的客户端, database对应库, collection是对象集合.

对对象的操作是争对collection来的.

四 操作

1> 插入


var document = new BsonDocument
 {
 { "name", "测试数据1" },
 { "type", "大类" },
 { "number", 5 },
 { "info", new BsonDocument
   {
   { "x", 111 },
   { "y", 222 }
   }}
 };
collection.InsertOne(document);

同理还有InsertMany() ,  鉴于VS高超的智能提示, 一目了然.

2> 查找

上一步插入之后, 通过find将它查找出来

find()需要一个filter参数, 根据条件查询


collection.Find(Builders<BsonDocument>.Filter.Empty);

上述表示无条件查询, matches everything.

如果有条件的话, 可以从Builders<BsonDocument>.Filter中选择, 比如Eq为相等, Lt为小于, Gt大于...顾名思义. 基于VS强大的智能提示, 非常清晰.

举例条件查询:


collection.Find(Builders<BsonDocument>.Filter.Eq("name", "测试数据1") & Builders<BsonDocument>.Filter.Lt("number", 6));

多项条件之间的与或关系, 对应使用&和|符号

3> 更新


collection.UpdateMany(Builders<BsonDocument>.Filter.Eq("name", "测试数据1"), Builders<BsonDocument>.Update.Set("number", 6));

更新使用UpdateMany(), 同样支持条件从Builders<BsonDocument>.Filter中获取.

更新支持添加新的field, 如:


collection.UpdateMany(Builders<BsonDocument>.Filter.Eq("name", "测试数据1"), Builders<BsonDocument>.Update.Set("number2", 666));

4> 删除


collection.DeleteMany()

其他几个API大同小异

五 BsonDocument到自定义class Object的相互转换

不要引入Json.Net(Newtonsoft.Json)

1> 自定义类型到BsonDocument

扩展函数:


entity.ToBsonDocument()

2> BsonDocument到自定义类型

通常是在Find的时候吧,  IFindFluent.As<TEntity>()转就可以了.


var result = collection
   .Find((Builders<BsonDocument>.Filter.Lt("number",999) & Builders<BsonDocument>.Filter.Gt("number", 110)) & Builders<BsonDocument>.Filter.Eq("name", "测试数据1")) .OrderBy(x=>x["number"])//排序
   .Skip(10)//跳过
   .Limit(10)//限制    .As<Bar>()//m=>o
   .ToList();//像极了Linq吧?

如果不是呢?


var entity = BsonSerializer.Deserialize<Bar>(bson);

用到的自定义class大概长这样:


public class Bar
{
 public ObjectId _id { get; set; }
 public string name { get; set; }
 public string type { get; set; }
 public int number { get; set; }
 public int number2 { get; set; }
 public BarInfo info { get; set; }

public class BarInfo
 {
  public int x { get; set; }
  public int y { get; set; }
 }
}

小感想:

mongodb对程序员是极友好的, 可以动态变化的结构, 让程序员不再害怕频繁变动的需求.

来源:http://www.cnblogs.com/pasoraku/p/9634946.html

标签:c#,mongodb,查找
0
投稿

猜你喜欢

  • SpringMVC中事务是否可以加在Controller层的问题

    2021-12-09 01:20:15
  • Java日常练习题,每天进步一点点(58)

    2021-06-26 01:13:02
  • IDEA安装后找不到.vmoptions文件的问题及解决

    2023-10-05 22:43:44
  • springboot ErrorPageFilter的实际应用详解

    2023-11-24 01:02:59
  • java和 javaw 及 javaws的区别解析

    2023-07-21 06:31:05
  • Android实现动态添加数据与堆叠折线图详解流程

    2021-09-27 17:50:49
  • java发送kafka事务消息的实现方法

    2022-05-17 01:18:35
  • C#中Decimal类型截取保留N位小数并且不进行四舍五入操作

    2022-01-22 20:55:59
  • Java中避免过多if-else的几种方法

    2023-11-28 13:07:09
  • SpringBoot错误处理机制以及自定义异常处理详解

    2021-09-23 05:45:29
  • Java继承Thread类创建线程类示例

    2023-08-04 20:27:08
  • 利用OPENCV为android开发畸变校正的JNI库方法

    2021-10-06 17:33:27
  • 详解IDEA多module项目maven依赖的一些说明

    2023-07-21 06:09:05
  • C# WPF如何反射加载Geometry几何图形数据图标

    2021-09-06 11:39:08
  • C#使用iTextSharp设置PDF所有页面背景图功能实例

    2021-10-26 02:01:59
  • SpringBoot的@Value给静态变量注入application.properties属性值

    2023-09-20 11:54:07
  • Netty分布式高性能工具类FastThreadLocal和Recycler分析

    2023-03-20 09:13:09
  • android的RecyclerView实现拖拽排序和侧滑删除示例

    2023-10-06 01:33:32
  • Java 中的Printstream介绍_动力节点Java学院整理

    2021-12-21 06:08:36
  • Java使用原型模式展现每日生活应用案例详解

    2023-03-08 04:27:08
  • asp之家 软件编程 m.aspxhome.com