首页 > 数据库 >第二节:基于.Net 链接Mongodb实战

第二节:基于.Net 链接Mongodb实战

时间:2024-10-08 20:02:46浏览次数:8  
标签:shipName return string Mongodb public shipService 第二节 Net id

 

三. 实操

(详见官网:https://www.mongodb.com/zh-cn/docs/drivers/csharp/current/quick-start/)

1. 相关程序集

  【MongoDB.Driver 2.17.1】

    相关实体:加上如下特性,id值自动生成。

 public class ShipInfo
    {
        /// <summary>
        /// 自动生成id
        /// </summary>
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string id { set; get; }
        public string shipCode { set; get; }   
        public string shipName { set; get; }       
        public decimal shipPrice { set; get; }    
        public DateTime addTime { set; get; }     
        public int delflag { set; get; } 

    }

2. 建立连接

   对于db和collection,有的话直接连接,没有则创建,但必须进行相应的数据操作的时候才会创建。

public class HomeController : ControllerBase
{
        private readonly IMongoCollection<ShipInfo> shipService;
        public HomeController()
        {
            // 1. 建立MongoDB连接
            var client = new MongoClient("mongodb://localhost:27017");

            // 2. 获取数据库ShipDB 【若没有,则自动创建,插入数据的时候才生效】
            var database = client.GetDatabase("ShipDB");

            // 3. 获取表 ShipInfo【若没有,则自动创建,插入数据的时候才生效】
            shipService = database.GetCollection<ShipInfo>("ShipInfo");
        }
  }

 

3. 增加

单条:InsertOne

 /// <summary>
        /// 插入-单条
        /// </summary>
        [HttpPost]
        public string InsertOne()
        {
            ShipInfo shipInfo = new()
            {
                shipName = "001",
                shipCode = "test1",
                shipPrice = 1000,
                addTime = DateTime.Now,
                delflag = 0
            };
            shipService.InsertOne(shipInfo);
            return "okok";
        }

多条:InsertMany

  /// <summary>
        /// 插入-多条
        /// </summary>
        [HttpPost]
        public string InsertMany()
        {
            List<ShipInfo> shipList = new List<ShipInfo>();
            for (int i = 1; i <= 5; i++)
            {
                ShipInfo shipInfo = new();
                shipInfo.shipName = "ypf-" + i;
                shipInfo.shipCode = "000-" + i;
                shipInfo.shipPrice = 1000;
                shipInfo.addTime = DateTime.Now.AddDays(i);
                shipInfo.delflag = 0;
                shipList.Add(shipInfo);
            }
            shipService.InsertMany(shipList);
            return "ok";
        }

如下图:

 

4. 删除

单条:DeleteOne

  /// <summary>
        /// 删除-单条
        /// </summary>
        [HttpPost]
        public string DeleteOne(string id)
        {
            DeleteResult result = shipService.DeleteOne<ShipInfo>(u => u.id == id);
            return "ok--" + result.DeletedCount;
        }

多条:DeleteMany

 /// <summary>
        /// 删除-多条条
        /// </summary>
        [HttpPost]
        public string DeleteMany(string id)
        {
            DeleteResult result = shipService.DeleteMany<ShipInfo>(u => u.id == id);
            return "ok--" + result.DeletedCount;
        }

 

5. 修改

单条: UpdateOne

 /// <summary>
        /// 更新-单条 (根据id值更新)
        /// </summary>
        /// <param name="id">编号</param>
        /// <param name="shipName">船名</param>
        /// <param name="shipCode">船编码</param>
        /// <returns></returns>
        [HttpGet]
        public string UpdateOne(string id, string shipName, string shipCode)
        {
            var myUpdate = Builders<ShipInfo>.Update
                           .Set("shipName", shipName)
                           .Set("shipCode", shipCode);

            UpdateResult result = shipService.UpdateOne(u => u.id == id, myUpdate);
            return "ok--" + result.ModifiedCount;
        }

多条: UpdateMany

 /// <summary>
        /// 批量更新-多条 (根据shipName值更新)
        /// </summary>
        /// <param name="shipName">船名</param>
        /// <param name="shipCode">船编码</param>
        [HttpGet]
        public string UpdateMany(string shipName, string shipCode)
        {
            var myUpdate = Builders<ShipInfo>.Update
                           .Set("shipCode", shipCode);
            UpdateResult result = shipService.UpdateMany(u => u.shipName == shipName, myUpdate);
            return "ok--" + result.ModifiedCount;
        }

 

6. 查询

查询:Find

  /// <summary>
        /// 条件查询
        /// (根据船名查询信息)
        /// </summary>
        /// <param name="shipName">船名</param>
        /// <returns></returns>
        [HttpPost]
        public List<ShipInfo> GetByShipName(string shipName)
        {
            return shipService.Find(u => u.shipName == shipName).ToList();
        }

分页:Skip+Limit

/// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="pageSize">每页数量</param>
        /// <returns></returns>
        [HttpGet]
        public List<ShipInfo> GetPageList(int pageIndex = 1, int pageSize = 1)
        {
            return shipService.Find(u => true).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();
        }

排序:SortBy、SortByDescending

   /// <summary>
        /// 排序(根据时间字段)
        /// </summary>
        /// <param name="isAsc">是否升序</param>
        /// <returns></returns>
        [HttpPost]
        public List<ShipInfo> GetListBySort(bool isAsc = true)
        {
            if (isAsc)
            {
                return shipService.Find(u => true).SortBy(u => u.addTime).ToList();
            }
            else
            {
                return shipService.Find(u => true).SortByDescending(u => u.addTime).ToList();
            }
        }

 

7. 创建索引

索引:CreateOne+CreateIndexModel


        /// <summary>
        /// 创建索引
        /// </summary>
        /// <param name="indexName">索引名称</param>
        /// <returns></returns>
        [HttpPost]
        public string CreateOne(string indexName)
        {
            var indexKeysDefinition = Builders<ShipInfo>.IndexKeys.Ascending(indexName);
            shipService.Indexes.CreateOne(new CreateIndexModel<ShipInfo>(indexKeysDefinition));

            return "ok";
        }

如下图:

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

标签:shipName,return,string,Mongodb,public,shipService,第二节,Net,id
From: https://www.cnblogs.com/yaopengfei/p/18452384

相关文章

  • Goland安全开发第二节
    Goland安全开发第二节一、基础语法-初识函数、基本类型packagemainimport"fmt"funcmain(){fmt.Println("HelloGo!")}上述是一个简单的go代码Package包是Go语⾔的基本组成单元,通常使⽤单个的⼩写单词命名,⼀个Go程序本质上就是⼀组包的集合。所有Go代码都有⾃......
  • 轻松上云怎么操作?IoT_CLOUD之中移OneNET
    ​ 最近来了很多新朋友,也经常被问:可以多讲些云平台的操作吗?当然可以!文末留言你想要了解的云平台,优先安排~接下来,本文将以Air780E+LuatOS作为示例,教你使用合宙IoT_CLOUD连接中移OneNET物联网云平台。 一、IoT_CLOUD简 1.1IoT_CLOUD特色简介IoT_CLOUD——是合宙专门为了......
  • OpenAI .NET 库稳定版发布,支持 GPT-4o 并改进 API 功能
    penAI在6月推出其官方.NET库的beta版之后,如今终于发布了稳定版。该库已在NuGet上作为包发布,支持最新的模型,如GPT-4o和GPT-4omini,并且提供完整的OpenAIRESTAPI。这次发布包括同步和异步API,以及流式聊天补全功能,同时还进行了关键的API更改,以提升一致性。开发......
  • Kubernetes的Pod调度:让你的应用像乘坐头等舱!
     一、Kubernetes中Pod调度的重要性在Kubernetes的世界里,Pod调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的Pod)送到最合适的停车位(节点)。调度不仅关乎资源的合理利用,还关乎应用的“生死存亡”,下面让我们来看看为什么调度这么重要。资源优化:想象一下,如果每辆......
  • MongoDB 用户权限管理,复制集,分片集群,备份恢复 rocky使用
    1MongoDB介绍1.4什么时候使用MongoDB1.数据量是有亿万级或者需要不断扩容2.需要2000-3000以上的读写每秒3.新应用,需求会变,数据模型无法确定4.需要整合多个外部数据源5.系统需要99.999%高可用6.系统需要大量的地理位置查询7.系统需要提供最小的latency8.管理的主要数......
  • .NET高级调试 - 3.7对象检查
    简介在大多数调试会话中,首先需要检查的项目就是分析应用程序的状态。在确认程序的问题是某种无效状态造成的,我们便需要分析程序是如何变成无效状态的。那么在分析过程中,需要为我们深入了解对象的各种审查方法内存转储内存转储非常底层,是从内存地址上观察地址上的内容,常常使用d......
  • C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿,推荐或自荐优质文章/项目/学习资源等。......
  • 4、.Net 快速开发框架:Blog.Core - 开源项目研究文章
    Blog.Core是一个基于.NETCore的开源博客系统,旨在提供一个简单、易用且功能丰富的博客平台。它采用最新的.NET技术栈,包括但不限于ASP.NETCore、EntityFrameworkCore、RazorPages等,以确保高性能和良好的开发体验。主要特性跨平台:作为.NETCore应用程......
  • Vulnhub 靶机 THE PLANETS: EARTH
    0x01信息收集1.1、nmap扫描IP段扫描,确定靶机地址平扫描nmap192.168.1.0/24扫描结果(部分)Nmapscanreportforearth.local(192.168.1.129)Hostisup(0.0015slatency).Notshown:983filteredtcpports(no-response),14filteredtcpports(admin-prohibited)P......
  • 【Kubernetes】常见面试题汇总(五十七)
    目录125.K8S创建服务status为ErrlmagePull?126.不能进入指定容器内部?特别说明:题目  1-68  属于【Kubernetes】的常规概念题,即“汇总(一)~(二十二)”。题目 69-113 属于【Kubernetes】的生产应用题,其中104-113为“情景类”。题目114-132属于【Kube......