go mongodb排序查询_Kotlin与MongoDB整合CURD案例详解
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案例详解相关推荐
- java mongodb排序查询_java操作mongodb基础(查询 排序 输出list)
代码如下: package com.infomorrow.webroot; import java.util.List; import com.mongodb.BasicDBObject; impor ...
- go mongodb排序查询_《MongoDB》day two
Mongodb的更新方式有? db.集合名.update() 函数:用于更新已存在的文档. 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...
- springboot2整合mysql5_SpringBoot2整合SSM框架详解
SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...
- 二、SSM整合按步骤详解(清晰的思路加代码)从零开始一步步整合【二】(完结)
接上一章节继续SSM整合按步骤详解(清晰的思路加代码)从零开始一步步整合[一] 上面讲了Spring和SpringMVC的整合,现在开始下一步,先来搭建一下MyBatis的环境 我们先来看看目录结构图 ...
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...
- 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...
不多说,直接上干货! 这个很简单,在集群机器里,选择就是了,本来自带就有Impala的. 扩展博客 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 欢迎大 ...
- 窗口分析函数19_Mysql查询窗口函数里第一个 最后一个 第N个元素的值的案例详解(FIRST_VALUE LAST_VALUE NVH_VALUE)
Mysql查询窗口函数之按序号取元素详解 需求概述 查询以课程(course)分区以分数(score)逆序的窗口里的第一个.最后一个和第2个元素对应的值.示例表数据见下: SELECT '数学' co ...
- Springboot整合redis配置详解
Springboot整合redis配置详解 1.导入依赖 <dependency><groupId>org.springframework.boot</groupId&g ...
- Spring整合Schedule定时任务详解
Spring整合Schedule定时任务详解 Spring 定时任务官方网站 一.概述 用Spring,就是为了简单. 但是我还是要总结下java定时任务实现的几种方式. 1.TimerTask,等于 ...
最新文章
- mysql 正则 java 区别_MySQL中的正则表达式
- Android ListView中有Button,ItemClick事件失效
- python 1033 旧键盘打字 (20 分)
- python ImportError: No module named unittest2
- php文字超链接怎么写,php 文本URL转换为超链接功能实例
- python: append、extend、insert、add
- Zabbix 企业级监控_
- python七段数码管绘制单个数字_#Python语言程序设计Demo - 七段数码管绘制
- Linux 添加新硬盘
- leapmotion 初识
- 音视频即时通讯解决方案
- 性能分析之排队论应用
- 语言-英语-美国英语:美国英语
- 从0开始编写minecraft光影包(0)GLSL,坐标系,光影包结构介绍
- java小易——Servlet轻量级服务
- 数据是信息的载体,能够被计算机识别、存储和加工处理,数据包括文字、表格、图像等
- Selenium的PO模式
- 2021年安全员-B证试题及解析及安全员-B证证考试
- Java反射获取构造方法
- 软件质量改进(一)------过程改进方法
热门文章
- android adb 模拟来电,在Android模拟器中模拟GPS、打电话、发短信……
- php post 二维数组,php curl模拟post请求和提交多维数组的示例代码
- python中的方法什么意思_python中的函数和方法的区别是什么
- python 二重积分_Python机器学习(五十七)SciPy 积分
- C++基础与深度解析第二章:对象与基本类型
- java静态注解处理器_深入理解Java:注解(Annotation)--注解处理器
- android 底部去除list渐变,layer-list渐变色的处理
- android override作用,Android Studio中@override的含义
- php图片上传有黑色背景,php Imagemagick jpg黑色背景
- python编写会计凭证金蝶_如何编制记账凭证?