C#使用MongoDB-第一章 基本操作

这篇具有很好参考价值的文章主要介绍了C#使用MongoDB-第一章 基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里在C#中所使用的连接MongoDB数据库的依赖库为MongoDB.Driver,使用前先到Nuget中进行安装。
C#使用MongoDB-第一章 基本操作,C#操作数据库,c#,mongodb,开发语言

连接MongoDB

MongoDB.Driver中,用于连接数据库的类型为MongoClient

  • 注意,MongoClient对象表示的是数据库的连接池,因此我们在开发项目时,大多数情况只需要创建一个MongoClient实例就够了。

一、连接单机服务

标准的连接字符串:mongodb://username:password@host[:port]/defaultauthdb?<options>

  • username:password@:用户名与密码,如果服务开启了用户认证,那么可以在连接字符串中写入,否则可以不写。
  • host[:port]:要连接的服务的主机名(或IP地址)和端口,端口可以不写,默认为27017
  • /defaultauthdb:创建登录用户时所用的数据库,登录时会到该数据库中进行用户认证。如果连接字符串中没有写明username:password@,此段可以不写,如果连接字符串中写明了username:password@但是没有写明数据库,那么将会到admin数据库中进行用户认证。
  • ?<options>:连接选项,一般不写直接用默认的就可以了。
const string conStr= "mongodb://moo:123456@127.0.0.1:27017/FirstMongo";
var client = new MongoClient(conStr);
var studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");

二、连接副本集

要连接集群,需要指定集群的其中一台主机或多台主机的主机名(或IP地址)以及端口号,并将选项replicaSet设置为集群名字。

集群的连接字符串:mongodb://moo:123456@127.0.0.1:27017/FirstMongo?replicaSet=myrs

const string conStr = "mongodb://moo:123456@127.0.0.1:27017/FirstMongo?replicaSet=myrs";
var client = new MongoClient(conStr);
var studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");

三、连接分片

连接分片时跟连接单机差不多,主要是指定Mongos(分片的路由服务)的主机名和端口号,如果同一个主机上有多个路由服务,那么可以写成host:port1,port2,…,如果多个路由服务都在不同主机上,那么可以写成host1:port1,host2:port2,…

分片的连接字符串:mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo

const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
var client = new MongoClient(conStr);
var studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");

数据写入

  • 实体类

    class Student
    {
        public ObjectId Id { get; set; }
        public string? Name { get; set; }
        [BsonDefaultValue(23)]
        public int Age { get; set; }
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime Time { get; set; } = DateTime.Now;
    }
    

一、插入文档

1、插入单个文档

InsertOneAsync(document):异步插入单条数据。

InsertOne(document):同步插入单条数据。

  • 示例

    const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
    var client = new MongoClient(conStr);
    IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
    studentCollection.InsertOne(new Student { Name = "Test" ,Age = 23 });
    

2、插入多个文档

InsertManyAsync(IEnumerable<TDocument> documents):异步插入多条数据。

InsertMany(IEnumerable<TDocument> documents):同步插入多条数据。

  • 示例

    const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
    var client = new MongoClient(conStr);
    IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
    studentCollection.InsertMany(new List<Student>()
    {
        new Student
        {
            Age = 22,
            Name   = "ssssss1",
        },
        new Student
        {
            Age = 24,
            Name   = "ssssss2",
        },
        new Student
        {   Age = 23,
            Name   = "ssssss3"
        }
    });
    

二、修改文档

1、修改单个文档

修改单个文档,默认会修改第一个匹配条件的文档。

Task<UpdateResult> UpdateOneAsync(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> update[, ReplaceOptions options]):异步修改指定条件的文档。

UpdateResult UpdateOne(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> update[, ReplaceOptions options]):同步修改指定条件的文档。

  • filter:条件过滤器,可以通过Builders<Student>.Filter实例的方法来创建,支持多种方法包括where方法。此参数可以用lambda表达式代替

  • update:更新内容,可以通过Builders<Student>.Update.Set()方法来创建。

  • options:更换操作的设置选项,其中有几个较为常用选项:new ReplaceOptions() {IsUpsert=true, Hint="Name"}

    • IsUpsert:表示如果匹配不到合适的,是否插入新文档。
    • Hint:设置或者获取执行操作时搜索文档所用的索引。
  • UpdateResult:返回结果,其中保存了修改的条数、修改文档的_id等数据。

  • 示例

    const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
    var client = new MongoClient(conStr);
    IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
    var filter = Builders<Student>.Filter.Where(s => s.Age == 23);
    var update = Builders<Student>.Update.Set(s => s.Age, 40);
    var result = studentCollection.UpdateOne(filter,update);
    

2、修改多个文档

修改多个文档,会将所有符合条件的文档都进行修改

Task<UpdateResult> UpdateManyAsync(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> update[, ReplaceOptions options]):异步修改多个文档。

UpdateResult UpdateMany(FilterDefinition<TDocument> filter, UpdateDefinition<TDocument> update[, ReplaceOptions options]):同步修改多个文档。

使用方式个修改一个文档是一样的,这里就不举例了。

三、替换文档

Task<ReplaceOneResult> ReplaceOneAsync(FilterDefinition<TDocument> filter, TDocument replacement[, ReplaceOptions options]):异步替换指定文档。

ReplaceOneResult ReplaceOne(FilterDefinition<TDocument> filter, TDocument replacement[, ReplaceOptions options]):同步替换指定文档。

  • filter:条件过滤器,可以通过Builders<Student>.Filter实例的方法来创建,支持多种方法包括where方法。此参数可以用lambda表达式代替
  • replacement:要拿来替换的对象。
  • options:更换操作的设置选项,其中有几个较为常用选项:new ReplaceOptions() {IsUpsert=true, Hint="Name"}
    • IsUpsert:表示如果匹配不到合适的,是否插入新文档。
    • Hint:设置或者获取执行操作时搜索文档所用的索引。
  • ReplaceOneResult:替换结果。

注意,这个替换操作,我用了一下,如果替换时我不给新文档的实体类设置Id,会报错,要设置Id属性,并且要设置跟更新的那条文档的Id相同才不会报错,不知道为啥。

  • 示例

    const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
    var client = new MongoClient(conStr);
    IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
    var filter = Builders<Student>.Filter.Eq(s => s.Age,24);
    var s = new Student { 
        Name = "replace", 
        Age = 50 
    };
    var temp = studentCollection.Find(filter).First();
    s.Id = temp.Id;
    var result = studentCollection.ReplaceOne(filter, s, new ReplaceOptions() {  IsUpsert=true });
    

三、删除

1、删除单个文档

Task<DeleteResult> DeleteOneAsync(FilterDefinition<TDocument> filter [, DeleteOptions options]):异步删除单个指定文档。

DeleteResult DeleteOne(FilterDefinition<TDocument> filter [, DeleteOptions options]):同步删除单个指定文档

  • filter:条件过滤器,可以通过Builders<Student>.Filter实例的方法来创建,支持多种方法包括where方法。此参数可以用lambda表达式代替

  • options:删除操作的设置选项,其中有个较为常用选项:new ReplaceOptions() {Hint="Name"}

    • Hint:设置或者获取执行操作时搜索文档所用的索引。
  • DeleteResult:删除后的返回结果,

  • 示例

    const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
    var client = new MongoClient(conStr);
    IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
    var filter = Builders<Student>.Filter.Eq(s => s.Age,24);
    var result = studentCollection.DeleteOne(filter);
    //也支持直接传入lambda表达式
    // var result = studentCollection.DeleteOne(s=>s.Age == 24 );
    

2、删除多个文档

Task<DeleteResult> DeleteManyAsync(FilterDefinition<TDocument> filter [, DeleteOptions options]):异步删除多个符合条件的文档。

Task<DeleteResult> DeleteMany(FilterDefinition<TDocument> filter [, DeleteOptions options]):同步删除多个符合条件的文档。

用法跟删除单个文档是一样的,这里就不举例了。

数据读取

  • 实体类

    class Student
    {
        public ObjectId Id { get; set; }
        public string? Name { get; set; }
        [BsonDefaultValue(23)]
        public int Age { get; set; }
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime Time { get; set; } = DateTime.Now;
    }
    

一、查询文档

1、查询单个文档

Task<TDocument> collectionObj.Find(FilterDefinition<TDocument> filter[,FindOptions options]).FirstOrDefault():异步查询符合条件的第一个文档,无匹配文档则返回null

TDocument collectionObj.Find(FilterDefinition<TDocument> filter[,FindOptions options]).FirstOrDefault():同步查询符合条件的第一个文档,无匹配文档则返回null

  • 这里的collectionObj指的是从驱动库获取的集合对象。

  • TDocument:返回结果,与获取集合对象时的泛型参数类型有关。(可以参考一下下面的例子)

  • filter:条件过滤器,可以通过Builders<Student>.Filter实例的方法来创建,支持多种方法包括where方法。此参数可以用lambda表达式代替

  • options:查询操作的设置选项,其中有个较为常用选项:new ReplaceOptions() {Hint="Name", MaxTime=100}

    • Hint:设置或者获取执行操作时搜索文档所用的索引。
    • MaxTime:本次操作的最长执行时间,为TimeSpan类型。
  • 示例

    const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
    var client = new MongoClient(conStr);
    IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
    var student = studentCollection.Find(s => s.Age == 22,new FindOptions {MaxTime = TimeSpan.FromMilliseconds(20) }).ToList();
    

2、查询多个文档

Task<List<TDocument>> collectionObj.Find(FilterDefinition<TDocument> filter[,FindOptions options]).ToListAsync():异步查询符合条件的所有文档。

List<TDocument> collectionObj.Find(FilterDefinition<TDocument> filter[,FindOptions options]).ToList():同步查询符合条件的所有文档。

用法跟查询单个是一样的,这里就不举例了。

3、查询所有文档

想要查询所有文档,直接将空过滤器Builders<Guitar>.Filter.Empty传入Find即可。

const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
var client = new MongoClient(conStr);
IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
var student = studentCollection.Find(Builders<Guitar>.Filter.Empty).ToList();

二、常用的过滤器

1、All()、Size()

All():如果文档中的指定数组字段包含传入的所有元素,则匹配。

Size():如果文档中的指定数组字段的元素个数与指定个数相等,则匹配。

var filter1 = Builders<Student>.Filter.All(s => s.Datas, new List<string> {"a","b","c"});
var filter2 = Builders<Student>.Filter.Size(s => s.Datas, 3);

2、Exists()

Exists():存在指定的字段则匹配。

var filter = Builders<Student>.Filter.Exists(s => s.Class);

3、Regex()

Regex():正则匹配

var filter = Builders<Student>.Filter.Regex(g => g.Name, "^S");

三、Linq语句的配合使用(推荐使用)

MongoDB.Driver驱动库支持使用Linq语句,当我们使用Linq语句进行查询请求时,驱动库会自动将其转换成对应的聚合操作。
要使用Linq,只需要调用集合对象AsQueryable()方法,获得对应的IMongoQueryable<T>实例,就可以尽情的Linq了

const string conStr = "mongodb://moo:123456@127.0.0.1:27017,27018/FirstMongo";
var client = new MongoClient(conStr);
IMongoCollection<Student> studentCollection = client.GetDatabase("FirstMongo").GetCollection<Student>("Student");
var queryableCollection = studentCollection.AsQueryable();
var result = queryableCollection.Take(3).Where(s => s.Age > 3).ToList();

驱动库所支持的Linq方法,基本上能满足绝大部分的查询了文章来源地址https://www.toymoban.com/news/detail-799185.html

Method Name Description
Any Determines if any documents match the specified criteria
Average Calculates the average of the specified fields
Count Returns an Int32 that represents the number of documents that match the specified criteria
LongCount Returns an Int64 that represents the number of documents that match the specified criteria
Distinct Returns distinct documents that match the specified criteria
First Returns the first matching document, and throws an exception if none are found
FirstOrDefault Returns the first matching document, or null if none are found
GroupBy Groups documents based on specified criteria
GroupJoin Performs a left outer join to another collection in the same database
Max Returns the document with the maximum specified value
OfType Returns documents that match the specified of type
OrderBy, OrderByDescending Returns results in a specified sort order
ThenBy, ThenByDescending Allows a secondary sort to be specified
Select Selects documents based on specified criteria
SelectMany Projects each element of a sequence and combines the resulting sequences into one document
Single Returns the only matching document, and throws an exception if there is not exactly one document
SingleOrDefault Returns a single matching document or null if no documents match
Skip Skips over a specified number of documents and returns the rest of the results
Sum Returns the sum of the values in a specified field
Take Specifies the number of results to return
Where Returns all documents that match your specified criteria

到了这里,关于C#使用MongoDB-第一章 基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式数据库NoSQL(二)——MongoDB 数据库基本操作

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的

    2024年02月06日
    浏览(49)
  • C# 使用OpenCV基本图像操作功能

    OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。C#在上位机开发中比较常用,有些项目需要在上位机上加入一些机器视觉相关的功能,在下面简单介绍了C#中使用OpenCV库的方法。 在管理NuGet包中,搜索OpenCvSharp4,安装

    2024年02月15日
    浏览(63)
  • Java操作mongodb的基本操作

    目录 MongoDB的基本操作 新增 方式一: 方式二: 删除:  带条件的删除 修改 修改条件 修改并添加  多条件修改: 查询 普通查询 条件查询 ​编辑 多条件查询 模糊查询: 查询除来的结果有两种的显示方式: MongoDB中的文档本质上是一种类似JSON的BSON格式的数据。 BSON是一种类

    2023年04月09日
    浏览(51)
  • webrtc 入门第一章 基本设备操作

    一、介绍 1、webrtc是什么 webrtc是一个由google发起的开源实时通信方案,其中包括视频/音频采集、编解码、数据传输、音视频展示的功能。在浏览器,桌面应用,移动设备或者lot设备上都有可以运行的api接口,均可实现实时通信能力。web开发者可以基于web api开发基于视频、音

    2024年02月02日
    浏览(42)
  • MongoDB操作基本教程

    v6.0.7 bin目录下默认可执行文件说明 mongod 实例,这样不仅减少资源竞争,而且服务器故障也不会同时影响到多个服务。 mongos 在分片集群中扮演路由的角色,提供客户端和分片之间的接口。 mongosh 是 MongoDB 集成的交互式 shell 工具。 数据库工具 需要另外下载:https://www.mongodb

    2024年02月16日
    浏览(36)
  • Redis,MongoDB基本操作练习题

    语法不会可以在官网上查询MongoDB教程 String类型基本操作: List类型基本操作: hash类型基本操作: 创建一个数据库 名字grade: 创建class集合: 集合中插入若干数据: 查看班级所有人信息: 查看班级中年龄为8岁的学生信息: 查看年龄大于10岁的学生信息: 查看年龄在 4—8岁

    2024年02月16日
    浏览(40)
  • MySQL-Redis数据类型操作和MongoDB基本操作

    (1) 设置键值: (2) 读取键值: (3) 数值类型自增1: (4) 数值类型自减1: (5) 查看值的长度: (1)对列表city插入元素:Shanghai Suzhou Hangzhou (2)将列表city里的头部的元素移除 (3)将name列表的尾部元素移除到number列表的头部 (4) 对一个已存在的列表插入新元素

    2024年02月16日
    浏览(44)
  • Django Web开发(day4)——数据模型使用与填充网站数据(对数据库的基本操作)

    本博客将会涉及:  Django 数据模型的使用 视频数据的导入 admin 后台的使用  1、Django 数据模型的使用  在上一篇中完成了网站的数据模型的创建,在数据模型创建之后, Django 会为我们的数据模型创建一套数据库抽象的 API 接口,以供我们进行检索数据、创建数据、更新和修

    2024年01月18日
    浏览(53)
  • 第一章 数据库操作

    1.1 创建数据库 创建数据库是指在数据库系统中划分一块空间,用来存储相应的数据,这是进行表操作的基础,也是数据库管理的基础 在MySQL中创建数据库之前,可以使用show语句来显示当前已经存在的数据库,具体SQL语句如下 创建数据库的SQL语句如下,其中 参数database_name代

    2024年02月05日
    浏览(63)
  • 第一章 数据库的操作

    (1)语法 假设我们想要创建一个名称为D1的数据库,可以写出下图中的MySQL语句。 (2)字符集与校验规则 a.定义 字符集顾名思义字符的集合。但 这个字符的集合中不仅包含字符,还包含了每个字符对应的数字编码 。比如我们在c++和c中常用的字符集:ASCII表。 在了解了字符

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包