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

奔跑的路上 / 2024-10-09 / 原文

 

三. 实操

(详见官网: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(姚鹏飞)
  • 博客地址 :
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。