通用的CRUD之MongoDB

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

前言

这是一个简便的,对MongoDB增删改查,无需提前建库,建表,安装就能快速上手使用。
MongoDB多条件查询需要JSON的多层嵌套如{DDATE:{$gte:{$date:'2023-06-05T13:41'},$lte:{$date:'2023-06-05T23:59'}},Qty:{$gt:10}},书写时非常难受,还容易出错。
本类库支持类SQL查询语法,如"DDATE>='2023-06-05 09:12:24' and DDATE<='2023-06-05 13:28:48' and Qty>10",同时也支持原生查询语法。

安装

Install-Package DbCRUD.MongoDbCRUD安装包

数据库连接及初始化 Database connection and initialization

 //数据库连接 Database connection
  IDbCRUD testdb =new MongoDbCRUD("mongodb://localhost:27017/testdb");
 //带连接选项初始化数据库连接对象
  MongoDbCRUD testdb = new MongoDbCRUD("mongodb://localhost:27017/testdb", opt => { opt.AutoCreateIndex = true;opt.AutoOpen = true; });

插入数据 Insert data

//*****插入对象数据 Insert object data synchronously
int id = testdb.Max<int>(tb_custormer);
var customer = new CrudTestModel
{
    ID = id + 1,
    Name = "objectData",
    Phones = new string[] { "80000", "90000" },
    FFloat=random.NextDouble(),
    IsActive = true,
    Dic = new Dictionary<string, object>
    {
        { "Name", "Embed_Data" },
        { "DDate", DateTime.Now }
    }
};
var result = testdb.Insert(tb_custormer, customer);
//*****插入字典数据 Insert dictionary data synchronously
var dic1 = new Dictionary<string, object>
{
    //{ "_id", 1 },//***如果不指定ID,插入时会自动编一个objectid的唯一ID
    { "Name", "MongodbCRUD" },
    { "Qty",random.Next(1,10000) },
    { "DDATE", DateTime.Now }
};
var dicresult = testdb.Insert(autoIDData, dic1);
//*****插入JSON数据 Insert JSON data 
string jsondata = JsonConvert.SerializeObject(dic1);
var result12 =testdb.Insert(tb_jsondata, jsondata);
//*****SQL语句插入 sql command insert 大小写敏感
var result13 = testdb.Insert($"insert into {sqldata}('name','date') values ('test1','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:dd")}')");
//*****批量插入列表 Batch insert
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
int maxid = testdb.Max<int>(dictable);
for (int i = 0; i < 10; i++)
{
    maxid++;
    var dic2 = new Dictionary<string, object>
    {
        { "_id",maxid },
        { "Name", "Batch insert" },
        { "Qty",random.Next(1,10000) },
        { "DDATE", DateTime.Now }
    };
    listdata.Add(dic2);
}
var listResult= testdb.Insert(dictable, listdata);

通用的CRUD之MongoDB

更新数据 update data

    var updata = new Dictionary<string, object>
    {
        { "Name", "更新指定字段数据 Updates the specified field data" },
        { "Qty", 600}
    };
    var upresult = testdb.UpDate(dictable, updata, "_id=6");   //更新_id=2的数据
    //【SQL语句更新】 更新_id=1的数据 ,mongodb对大小写敏感,所有sql语句中的表名和字段名大小写要与DB一致。
    var sql_up_result = testdb.UpDate("UPDATE dicdata SET Name='zzw',Qty=188 where _id=1");  

更新及插入数据(数据存在更新,不存在插入) Update and insert data (there is an update of the data, but there is no insertion)

    //***** 更新或插入数据 Update or insert data
    var dic1 = new Dictionary<string, object>
    {
        { "_id", 2 },
        { "Name", "Inserts or updates a single piece of data" },
        { "Qty", 200},
        { "DDATE", DateTime.Now }
    };
    var result= testdb.Upsert(dictable, dic1);

   //*****Batch insert or update Batch insert or update
    var dic3 = new Dictionary<string, object>
    {
        { "_id", 3 },
        { "Name", "Batch insert or update" },
        { "Qty", 300},
        { "DDATE", DateTime.Now }
    };
    List<Dictionary<string,object>> listdata=new List<Dictionary<string, object>> { dic3,dic1};
    var listresult = testdb.Upsert(dictable, listdata);

   //*****不存在就插入 Insert if it doesn't exist
    int maxid = testdb.Max<int>(dictable)+1;
    var dic4 = new Dictionary<string, object>
    {
        { "_id", maxid },
        { "Name", "根据_id不存在插入值" },
        { "Qty", 8000},
        { "DDATE", DateTime.Now }
    };
    testdb.Upsert(dictable, dic4);

查询数据 Query data

   ///查找id=2的数据
    var databyid = testdb.FindByID<Dictionary<string, object>>(dictable, 2);

    //查找id=2的数据,返回模型数据。 
    //【注意】模型和数据库中的列数不一致时,需要在模型上加 [BsonIgnoreExtraElements]特性,
    //        mongodb默认时UTC时间,如果要转本地时间,在模型时间属性上加[BsonDateTimeOptions(Kind =DateTimeKind.Local)]特性
    var modeldata = testdb.Find<CrudTestModel1>(tb_custormer, "_id=2")?.FirstOrDefault();

    ///查找id>2的数据,返回按DDATE排序,并排除dic列的最新一条数据
    var ondresult = testdb.FindOne<CrudTestModel>(tb_custormer, "_id>2", project: "!dic", sort: "!DDATE");

    //查找Qty>10的数据
    var wheredata = testdb.Find<Dictionary<string, object>>(dictable, "Qty>10");
    
    //【SQL语法,查找开头】,查找name中'Mongodbi'开头的数据,条件不区分大小写,字段名称区分大小写
    var like_result = testdb.FindAndResult<Dictionary<string, object>>(autoIDData, "Name like'Mongodb%'");

    //【SQL语法,查找结尾】,查找name中'crud'开头的数据,条件不区分大小写,字段名称区分大小写
    var like_result1 = testdb.FindAndResult<Dictionary<string, object>>(autoIDData, "Name like'%crud'");

    //【SQL语法,包含】,查找name中包含'odb'的数据,条件不区分大小写,字段名称区分大小写
    var like_result2 = testdb.FindAndResult<Dictionary<string, object>>(autoIDData, "Name like'%odb%'");
    
    //【MongoDB语法】,查找name中'Mongodbi'开头的数据,不区分大小写
    var bsonwheredata = testdb.Find<Dictionary<string, object>>(autoIDData, "{Name:/^Mongodb/i}");
    
    //****SQL语法和Mongodb查询语法不能混用,简单查询使用SQL语法,书写简单,复杂查询只能使用原生语法。
    //【简写语法】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一页10条数据。
    var pagedata = testdb.GetPagingData<Dictionary<string, object>>(tb_jsondata, "Qty>10",project:"!_id",sort: "!DDATE", pageindex: 1, pagecount: 10);
    
    //【Mongodb语法】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一页10条数据。
    var mgdb_pagedata = testdb.GetPagingData<Dictionary<string, object>>(tb_jsondata, "{Qty:{$gt:10}}", project: "{_id:0}", sort: "{DDATE:-1}", pageindex: 1, pagecount: 10);
    
    //【返回DataTable】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一页10条数据。
    var datatable_pagedata = testdb.GetPagingData(autoIDData, "Qty>10", project: "!_id", sort: "!DDATE", pageindex: 1, pagecount: 10);
   
    //【多条件查询】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一页10条数据。
    var mu_where = testdb.GetPagingData<Dictionary<string, object>>(dictable, "_id>=6 and Qty>10", sort: "!DDATE", pageindex: 1, pagecount: 10);
   
    //【日期范围查询】查找DDATE>='2023-06-05 09:12:24' 和 DDATE<='2023-06-05 13:28:48'的数据。
    var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "DDATE>='2023-06-05 09:12:24' and DDATE<='2023-06-05 13:28:48'", sort: "!DDATE", pageindex: 1, pagecount: 10);
    
    //【in查询】查找Qty=200和300的数据。
    var in_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "Qty in(200,300)", sort: "!DDATE", pageindex: 1, pagecount: 10);
   
    //【in模糊查询】查找Name=Batch insert和data结尾的数据。
    var in_fuzzy = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "Name in('Batch insert','%data')", sort: "!DDATE", pageindex: 1, pagecount: 10);

    //【正则表达式查询】查找Name=Batch开头的数据。
    var in_regex = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "Name reg'^Batch'", sort: "!DDATE", pageindex: 1, pagecount: 10);s
    //【sql语句查询】查找_id=1的数据
    string sqlcmd = $"select _id,Name,DDATE from {dictable} where _id=1";
    var sqldata = testdb.Find<Dictionary<string, object>>(sqlcmd);
    //【委托查询】查找_id>=6 and Qty>10的数据。数据在委托中返回,方便进行数据处理
    var action_result = testdb.GetPagingDataAction<CrudTestModel1>(dictable, "_id>=6 and Qty>10", datalist => 
    {
        double sum = datalist.Sum(s => s.FFloat);
                
    });
    var link_where = testdb.FindAndResult<CrudTestModel>(tb_custormer, q=>q.ID>6 && q.ID<=10 && q.Name.Contains("obje"));

删除数据 delete data

    //**删除ID=8的数据
    var result = testdb.Delete(dictable, 8);

    //**删除qty>10的数据
     var wherresult = testdb.Delete(dictable, "_id>=10");
    //**使用sql语句删除ID = 7的数据,大小写敏感
    string sql = $"delete from {dictable} where _id=7";
    var sqlresult = testdb.Delete(sql);

消息事件绑定(可日志输出)

    public DbTest() {
    t estdb.Message += Testdb_Message;
    }

    private void Testdb_Message((string Message, string Level, DateTime Time) obj)
    {
       Debug.WriteLine($"{obj.Time}|{obj.Level}|{obj.Message}");
    }

增删改查系列包

  • 🍁 LiteDB: Install-Package DbCRUD.LiteDB
  • 🍃 MongoDB: Install-Package DbCRUD.MongoDB
  • 🍀 Mysql: Install-Package DbCRUD.Mysql
  • 🌿 Sqlite: Install-Package DbCRUD.Sqlite
  • 🍂 SQL SERVER: Install-Package DbCRUD.SqlServer

一致的增删改查语法

LiteDB

IDbCRUD testdb = new LiteDbCRUD(@"filename=CRUDTestDB.db");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' 和 DDATE<='2023-06-05 13:28:48'的数据。
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");

MongoDB

IDbCRUD testdb =new MongoDbCRUD("mongodb://localhost:27017/testdb");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' 和 DDATE<='2023-06-05 13:28:48'的数据。
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");

Mysql

IDbCRUD testdb = new MysqlCRUD(@"Server=127.0.0.1;Database=testdb;Uid=root;Pwd=;");

//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' 和 DDATE<='2023-06-05 13:28:48'的数据。
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");

Sqlite

IDbCRUD testdb = new SqliteCRUD($@"Data Source=sqlitedb.db; Cache=Shared")

//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' 和 DDATE<='2023-06-05 13:28:48'的数据。
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");

SQL SERVER

IDbCRUD testdb = new SqlServerCRUD(@"Data Source=xxx;Initial Catalog=xxx;User ID=sa;Password=xxx;Encrypt=True;TrustServerCertificate=True;");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' 和 DDATE<='2023-06-05 13:28:48'的数据。
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");

实体模型

     [BsonIgnoreExtraElements]
    public class CrudTestModel1
    {
        [BsonId]
        public int ID { get; set; }
        public string Name { get; set; }
        public string[] Phones { get; set; }
        public bool IsActive { get; set; }
        public double FFloat { get; set; } = 0.118;
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime DDATE { get; set; } = DateTime.Now;

    }

更多使用方法请移步到仓库 https://gitee.com/lzcode/db-crud


我的分享希望能给你带去帮助,您的打赏是我继续为您分享的动力。

通用的CRUD之MongoDB文章来源地址https://www.toymoban.com/news/detail-536574.html

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

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

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

相关文章

  • MongoDB【CRUD练习-条件查询-文档关系】

    这里会学习到一个数据类型: 数组 ,这里的语法和JavaScript十分相似。数组使用push来添加数据。 这里还会学到比较运算符:小于:lt ,等于:eq,大于: gt,小于等于: lte,大于等于: gte。和我们shell编程的比较运算符很像。 文档之间有三种: 一对一 夫妻 一对多/多对一

    2024年02月11日
    浏览(31)
  • MongoDB + SpringBoot 的基础CRUD、聚合查询

    springboot版本:2.7.10 点击查看代码 点击查看代码 也可以不使用实体类来存数据、查询数据 点击查看代码 参考:https://blog.csdn.net/weixin_44185213/article/details/125293170?spm=1001.2014.3001.5502 注入:SpringBoot中使用 MongoTemplate 来操作MongoDB 点击查看代码 聚合意思:自己见管网 点击查看代码

    2024年02月08日
    浏览(10)
  • Springboot WebFlux项目结合mongodb进行crud

    引入依赖 创建TaskRepository接口

    2024年01月18日
    浏览(19)
  • 【MongoDB】数据库、集合、文档常用CRUD命令

    目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 五、文档其

    2024年02月13日
    浏览(24)
  • 【庖丁解牛】vue-element-admin前端CRUD通用操作组件详解,对,核心就是crud.js文件

    vue-element-admin 框架之所以能够快速定制应用,得益于其通配的CRUD操作,属性配置多样化且个性化,能够满足绝大部分开发需求,也方便了代码生成。 可以深入学习重点源文件是: src/components/Crud/crud.js ,一共 863 行代码,以及下图中其它四个vue组件,形成了对通用CRUD操作的高

    2024年01月18日
    浏览(30)
  • Springboot MongoDB封装通用Servcie

    添加依赖,使用的Springboot 2.7.10 构建通用Service 构建通用Service, BaseService.java ,内容如下: 构建通用Service的实现 构建通用Service的实现,此处基于 MongoRepository 实现,当然也可以使用之前文档自定义通过 Repository 实现, BaseServiceImpl ,内容如下: 使用 定义 BookMongoRepository.ja

    2024年02月12日
    浏览(15)
  • SpringMVC---CRUD实现

    搭建环境 逆向生层对应的类(model、mapper.xml、mapper.java) 编写业务逻辑层 编写web层(控制器) 前端页面 1.8.1、分页工具类 1.8.2、分页助手类 1.8.3、tld文件 因为基本的增删改查都是插件自动生成的了,所以不需要再写了,这里加一个查询单个的sql 这里加了接口自然也是要加

    2024年02月09日
    浏览(19)
  • 实战SpringMVC之CRUD

    目录 一、前期准备 1.1 编写页面跳转控制类 二、实现CRUD 2.1 相关依赖 2.2 配置文件 2.3 逆向生成 2.4 后台代码完善 2.4.1 编写切面类 2.4.2 编写工具类 2.4.3 编写biz层 2.4.4 配置mapper.xml 2.4.5 编写相应接口类(MusicMapper) 2.4.6 处理controller层发送到biz的请求(配置spring-mvc.xml) 2.4.7 编写

    2024年02月09日
    浏览(30)
  • elasticsearch之crud

    新增索引 修改索引 索引不支持修改现有的,只支持新增 删除索引 查询所有的索引 新增与覆盖文档 post:带id不存在则新增,存在则覆盖(全量更新),不带id永远新增,且自动生成id put:必须带id,否则报错,如果存在则覆盖,如果不存在则新增 post带着id不存在则新增 post带着id存在,则覆盖

    2024年04月17日
    浏览(12)
  • 封装CRUD的方法

    CRUD是指创建(Create)、读取(Read)、更新(Update)和删除(Delete)四种基本的数据处理操作。 在软件开发中,CRUD方法通常用于对数据库或其他存储系统中的数据进行操作。 具体来说,CRUD方法包括以下四种操作: 创建(Create) :向数据库或其他存储系统中插入新数据。 读取(Read) :从数

    2024年02月10日
    浏览(18)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包