1、mongodb的低版本bson无法转换类型

  • 比如MongoDB数据库表的字段类型为Decimal,实体类用String去定义就会报如下错误
  • No converter found capablof converting from type [org.bson.types.Decimal128] to type [java.lang.String]

解决方法

2、排除自带的MongoDB依赖,添加自定义添加依赖

  • spring-boot-starter-data-mongodb有多少个与MongoDB有关系的都排除出去
org.springframework.boot            spring-boot-starter-data-mongodb                                            logback-classic                    ch.qos.logback                    spring-boot-starter-logging                    org.springframework.bootorg.mongodb                    mongodb-driver                org.mongodb                    mongodb-driver-core                org.mongodb                    bson

3、自定义高版本的jar依赖

4、数据源配置解决方法

  • MongoDB报Exception authenticating MongoCredential异常及权限问题处理解决,参考文章处理
  • mongodb://用户名:密码@机器IP:端口/数据库名?授权源=授权的名称
  • 由于安装的时候是以授权模式进行安装的,详情请参考Docker安装MongoDB
# MongoDB数据库配置# mongodb://用户名:密码@机器IP:端口/数据库名?授权源=授权的名称spring.data.mongodb.uri=mongodb://liangjl:123456@192.168.1.231:27017/mongoDB?authSource=admin

5、实体类

import org.springframework.data.annotation.Idimport org.springframework.data.mongodb.core.mapping.Documentimport java.math.BigDecimalimport java.util.*@Document(collection = "sales")data class Sales constructor(        /**         * id         */        @Id        var id: String? = null,        /**         * 条目         */        var item: String? = null,        /**         * 价钱         */        var price: BigDecimal? = null,        /**         * 数量         */        var quantity: Int? = null,        /**         * 时间         */        var date: Date? = null)

6、SalesService详解

  • 查询所有销售订单数据
@Autowired lateinit var mongoTemplate: MongoTemplate/** * 查询所有销售订单数据 * @return */fun findAll(): List {    return mongoTemplate.findAll(Sales::class.java)}
  • 查询所有销售订单数据,通过价格进行排序
/** * 查询所有销售订单数据,通过价格进行排序 * SQL 语句中, asc是指定列按升序排列,desc则是指定列按降序排列。 * @return */fun findSort(): List {    //按照价格与数量字段升序查询出来,    var sort = Sort(Sort.Direction.ASC, "price").and(Sort(Sort.Direction.ASC, "quantity"))     //查询item为abc的数据进行    var criteria = Criteria.where("item").`is`("abc")    var query = Query(criteria)    //限制1000条数据    return mongoTemplate.find(query.with(sort).limit(1000), Sales::class.java)}

查询所有销售订单数据,通过价格进行排序

  /**     * 查询所有销售订单数据,通过价格进行排序     * SQL 语句中, asc是指定列按升序排列,desc则是指定列按降序排列。     * @return     */    fun findSort(): List {        //按照价格与数量字段升序查询出来,        var sort = Sort(Sort.Direction.ASC, "price").and(Sort(Sort.Direction.ASC, "quantity"))         //查询item为abc的数据进行        var criteria = Criteria.where("item").`is`("abc")        var query = Query(criteria)        //限制1000条数据        return mongoTemplate.find(query.with(sort).limit(1000), Sales::class.java)    }

gt 大于函数的使用,查询价格大于6元的销售订单数据

    fun findGt(): List {        //查询价格大于6元的销售订单数据        var criteria = Criteria.where("price").gt(6)        var query = Query(criteria)        return mongoTemplate.find(query, Sales::class.java)    }

查询价格小于6元的销售订单数据

  fun findLt(): List {        //查询价格小于6元的销售订单数据        var criteria = Criteria.where("price").lt(6)        var query = Query(criteria)        return mongoTemplate.find(query, Sales::class.java)    }

通过Id去查询销售订单数据

    /**    * 在MongoDB插入脚本的时候是以数字的进行插入是,这里用String去根据Id去查询是查行不到数据    * 在mongoDB查询是数据变成,所以id可以看做Long或者Double类型入参进行查询    *    * fun getOne(id: Long): Sales? {}    * fun getOne(id: Double): Sales? {}    *    * {    *    "_id" : 1.0,    *    "item" : "abc",    *    "price" : NumberDecimal("10"),    *    "quantity" : 2,    *    "date" : ISODate("2014-03-01T08:00:00.000Z")    * }    */    fun getOne(id: Long): Sales? {       val query = Query(Criteria.where("id").`is`(id))       var sales = mongoTemplate.findOne(query, Sales::class.java)       return sales    }

插入数据

 /**    * 插入数据    */    fun addSales() {       var id = IdWorker.getId().toString()       var sale = Sales(id, "葡萄", BigDecimal(20), 1, Date())       //方法一       //mongoTemplate.insert(sale)       //方法二       mongoTemplate.save(sale)    }

删除数据

/** * 删除数据 */fun deleteById(id: String) {    val query = Query(Criteria.where("id").`is`(id))    mongoTemplate.remove(query, Sales::class.java)}
  • 修改数据
/** * 修改数据 */fun update(sales: Sales) {    var query = Query(Criteria.where("id").`is`(sales.id))    var update = Update().set("item", sales.item).set("quantity", sales.quantity)    //更新查询返回结果集的第一条    var first = mongoTemplate.updateFirst(query, update, Sales::class.java)    println("update:" + first)    //更新查询返回结果集的所有    // mongoTemplate.updateMulti(query,update, Sales::class.java)}     

7、SalesController代码

@RestController@RequestMapping("/rest/sales/")open class SalesController : BaseController() {    @Autowired lateinit var salesService: SalesService    /**     * 查询所有信息     */    @GetMapping("/findAll")    fun findAll(): List? {        return salesService.findAll()    }    /**     * 排序的使用     */    @GetMapping("/findSort")    fun findSort(): List? {        return salesService.findSort()    }    /**     * 大于的使用     */    @GetMapping("/findGt")    fun findGt(): List? {        return salesService.findGt()    }    /**     * 小于的使用     */    @GetMapping("/findLt")    fun findLt(): List? {        return salesService.findLt()    }    /**     * 根据Id去查询一条数据     */    @GetMapping("/getOne/{id}")    fun getOne(@PathVariable("id") id:Long): Sales? {        return salesService.getOne(id)    }    /**     * 插入一条数据     */    @PostMapping("/insert")    fun insert(): Unit {        return salesService.addSales()    }    /**     * 删除一条数据     */    @PutMapping("/deleteById/{id}")    fun deleteById(@PathVariable("id") id:String): Unit {        return salesService.deleteById(id)    }    /**     * 修改一条数据     * 假设如下的数据,传的JSON体为     * Content-Type = application/json;charset=UTF-8     *      * {  "id" : "1278573453263409154",  "item" : "苹果",  "quantity" : 10 }     */    @PutMapping("/update")    fun update(@RequestBody sales:Sales): Unit {        return salesService.update(sales)    }}

8、数据库表脚本

来自官方脚本 : https://docs.mongodb.com/manual/reference/operator/aggregation/group/index.html

db.sales.insertMany([  { "_id" : 1, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : NumberInt("2"), "date" : ISODate("2014-03-01T08:00:00Z") },  { "_id" : 2, "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : NumberInt("1"), "date" : ISODate("2014-03-01T09:00:00Z") },  { "_id" : 3, "item" : "xyz", "price" : NumberDecimal("5"), "quantity" : NumberInt( "10"), "date" : ISODate("2014-03-15T09:00:00Z") },  { "_id" : 4, "item" : "xyz", "price" : NumberDecimal("5"), "quantity" :  NumberInt("20") , "date" : ISODate("2014-04-04T11:21:39.736Z") },  { "_id" : 5, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : NumberInt("10") , "date" : ISODate("2014-04-04T21:23:13.331Z") },  { "_id" : 6, "item" : "def", "price" : NumberDecimal("7.5"), "quantity": NumberInt("5" ) , "date" : ISODate("2015-06-04T05:08:13Z") },  { "_id" : 7, "item" : "def", "price" : NumberDecimal("7.5"), "quantity": NumberInt("10") , "date" : ISODate("2015-09-10T08:43:00Z") },  { "_id" : 8, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : NumberInt("5" ) , "date" : ISODate("2016-02-06T20:20:13Z") },])

9、运行结果

10、Docker安装MongoDB

  • 参考文章

11、整合原代码Github地址

  • 代码在dev-mongodb分支上面
    Kotlin与MongoDB整合CURD案例详解
  • https://github.com/jilongliang/kotlin/tree/dev-mongodb

go mongodb排序查询_Kotlin与MongoDB整合CURD案例详解相关推荐

  1. java mongodb排序查询_java操作mongodb基础(查询 排序 输出list)

    代码如下: package com.infomorrow.webroot; import java.util.List; import com.mongodb.BasicDBObject; impor ...

  2. go mongodb排序查询_《MongoDB》day two

    Mongodb的更新方式有? db.集合名.update() 函数:用于更新已存在的文档. 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...

  3. springboot2整合mysql5_SpringBoot2整合SSM框架详解

    SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...

  4. 二、SSM整合按步骤详解(清晰的思路加代码)从零开始一步步整合【二】(完结)

    接上一章节继续SSM整合按步骤详解(清晰的思路加代码)从零开始一步步整合[一] 上面讲了Spring和SpringMVC的整合,现在开始下一步,先来搭建一下MyBatis的环境 我们先来看看目录结构图 ...

  5. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...

  6. 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...

    不多说,直接上干货! 这个很简单,在集群机器里,选择就是了,本来自带就有Impala的. 扩展博客 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 欢迎大 ...

  7. 窗口分析函数19_Mysql查询窗口函数里第一个 最后一个 第N个元素的值的案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)

    Mysql查询窗口函数之按序号取元素详解 需求概述 查询以课程(course)分区以分数(score)逆序的窗口里的第一个.最后一个和第2个元素对应的值.示例表数据见下: SELECT '数学' co ...

  8. Springboot整合redis配置详解

    Springboot整合redis配置详解 1.导入依赖 <dependency><groupId>org.springframework.boot</groupId&g ...

  9. Spring整合Schedule定时任务详解

    Spring整合Schedule定时任务详解 Spring 定时任务官方网站 一.概述 用Spring,就是为了简单. 但是我还是要总结下java定时任务实现的几种方式. 1.TimerTask,等于 ...

最新文章

  1. mysql 正则 java 区别_MySQL中的正则表达式
  2. Android ListView中有Button,ItemClick事件失效
  3. python 1033 旧键盘打字 (20 分)
  4. python ImportError: No module named unittest2
  5. php文字超链接怎么写,php 文本URL转换为超链接功能实例
  6. python: append、extend、insert、add
  7. Zabbix 企业级监控_
  8. python七段数码管绘制单个数字_#Python语言程序设计Demo - 七段数码管绘制
  9. Linux 添加新硬盘
  10. leapmotion 初识
  11. 音视频即时通讯解决方案
  12. 性能分析之排队论应用
  13. 语言-英语-美国英语:美国英语
  14. 从0开始编写minecraft光影包(0)GLSL,坐标系,光影包结构介绍
  15. java小易——Servlet轻量级服务
  16. 数据是信息的载体,能够被计算机识别、存储和加工处理,数据包括文字、表格、图像等
  17. Selenium的PO模式
  18. 2021年安全员-B证试题及解析及安全员-B证证考试
  19. Java反射获取构造方法
  20. 软件质量改进(一)------过程改进方法

热门文章

  1. android adb 模拟来电,在Android模拟器中模拟GPS、打电话、发短信……
  2. php post 二维数组,php curl模拟post请求和提交多维数组的示例代码
  3. python中的方法什么意思_python中的函数和方法的区别是什么
  4. python 二重积分_Python机器学习(五十七)SciPy 积分
  5. C++基础与深度解析第二章:对象与基本类型
  6. java静态注解处理器_深入理解Java:注解(Annotation)--注解处理器
  7. android 底部去除list渐变,layer-list渐变色的处理
  8. android override作用,Android Studio中@override的含义
  9. php图片上传有黑色背景,php Imagemagick jpg黑色背景
  10. python编写会计凭证金蝶_如何编制记账凭证?