Scala-Mongodb入门之CRUD
Scala入门之Mongo增删改查
环境jdk1.8,scala2.13
使用sbt管理依赖,在build.sbt中添加依赖:
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.9.0"
这里直接使用无账号密码验证进行连接
private val mongoDBUri = "mongodb://host:27017/?replicaSet=rs0&maxPoolSize=200"
private val mongoDBName = "gcr_member"
private val mongoClient = MongoClient(mongoDBUri)
val mongoDatabase = mongoClient.getDatabase(mongoDBName)
配置codecRegistry
import org.bson.codecs.configuration.CodecRegistries.{fromProviders, fromRegistries}
import org.mongodb.scala.bson.codecs.Macros._
//user
val userCodecRegistry = fromRegistries(fromProviders(classOf[User]), MongoClientSettings.getDefaultCodecRegistry())
val userDataBase = mongoDatabase.withCodecRegistry(userCodecRegistry)
private val userCollection = userDataBase.getCollection("gcr_user")
实体
case class User(id: String, username: String, password: String, organization: Option[Organization], otherOrganizations: Seq[Organization],
name: String, tel: String, disabled: Boolean, roles: Seq[Role], created: Long, updated: Long, deleted: Boolean)
插入数据
override def createUser(user: User): Option[User] = {
implicit val formats = org.json4s.DefaultFormats
val userJson: String = Serialization.write(user)
val insert = userCollection.insertOne(BsonDocument(userJson))
insert.printHeadResult()
val u = userCollection.find(equal("username",user.username)).first().headResult()
if (u == null) None else Option(user)
}
修改数据
override def updateUser(userId: String, user: User): Option[User] = {
val updates = userToBsonDocument(user)
val ret = userCollection.replaceOne(equal("id",userId),updates).headResult()
if(ret.getModifiedCount > 1 || ret.getMatchedCount == 0) throw new GCRException(ErrorDefines.MEMBER_USER_UPDATE_DEFINE,"更新用户失败")
val u = userCollection.find(equal("id",userId)).headResultToString()
val document = Document.parse(u)
//int64转换
import org.bson.json.JsonWriterSettings
val settings = JsonWriterSettings.builder.int64Converter((value: java.lang.Long, writer: StrictJsonWriter) => writer.writeNumber(value.toString)).build
val str = document.toJson(settings)
//导入隐式值,json转对象
implicit val formats = DefaultFormats
val nu = Json.apply(formats).parseOpt(str).map(_.extract[User])
nu
}
查询数据
override def getUserByUsername(username: String): Option[User] = {
val doc = userCollection.find(equal("username",username)).headResultToString()
val u = transformJsonToUser(doc)
Option(u)
}
删除数据
override def deleteUser(userId: String): Unit = {
//userCollection.findOneAndDelete(equal("id",userId)).printHeadResult()
val ret = userCollection.deleteOne(equal("id",userId)).headResult()
ret.getDeletedCount
}
注意:所有操作都需要参数接收
详细内容参考API文档:http://mongodb.github.io/mongo-scala-driver/2.9/reference/crud/
Scala-Mongodb入门之CRUD的更多相关文章
- MongoDB入门实践
MongoDB入门实践 简单介绍MongoDB,包括MongoDB的使用场景.和MySQL的对比.安装部署.Java客户端访问及总结 MongoDB? 我们遵循需求驱动技术的原则,通过一个场景来引入M ...
- MongoDB 入门之基础 DCL
此文章主要记录部分主要的 MongoDB 的 DCL 操作. MongoDB 默认不需要用户名和密码就可以用 mongodb.exe 登录 一.开启 MonogoDB 的权限模式 修改 MongoDB ...
- MongoDB入门三:MongoDB shell
MongoDB shell MongDB shell是一个功能完备的Javascript解释器,可以运行Javascript程序.也可以用于连接MongoDB服务器,执行脚本,对数据库进行操作.类似于 ...
- MongoDB入门三步曲1--安装、基本操作
mongodb 基本操作 目录 mongodb安装 mongod启动 mongo shell启动 mongod 停止 mongodb基本操作:CRUD 数据插入 数据查询 数据更新 数据删除 集合删除 ...
- MongoDB 入门之查询(find)
MongoDB 入门之查询(find) 1. find 简介 (1)find的第一个参数决定了要返回哪些文档. 空的查询文档会匹配集合的全部内容.默认就是{}.结果将批量返回集合c中的所有文档. db ...
- MongoDB入门简介
MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- mongodb入门教程
title: mongodb入门教程 date: 2016-04-06 14:47:18 tags: --- 为什么要认识呢,因为这玩意就一傻逼 借用一下百科的介绍 MongoDB 是一个介于关系数据 ...
- MongoDb 入门教程
MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...
- MongoDB入门必读(概念与实战并重)
MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...
随机推荐
- 1、了解JVM
1.JVM.JRE.JDK JVM:是可以将要运行的程序编译成机器语言并去执行的一个平台,具有跨语言.跨平台的特性,运行时需要依赖JRE中的类库 JRE:包含了JVM以及代码运行时的类库,时Java程 ...
- Centos-当前登录用户信息- w who
w who 显示当前登录系统的用户,但w显示的更为详细 who 相关参数 # 默认输出 用户名.登录终端.登录时间 -a 列出所有信息 -b 系统最近启动日期 -m 当前终端信息,相当于 w ...
- Go-简介
Go简介 Google开发,新的具有面向接口.函数式编程.并发编程特点的编译性强类型通用编程语言 Go核心 1. 接口 2. 并发编程 3. 函数 Go-接口 package main import ...
- chrome浏览器的两个坑,以及其他
chrome打开本地网页时,不能保存cookiechrome拒绝使用ajax访问本地文件(火狐可以) ipinfo.io/ip 获得公网iphttps://v1.hitokoto.cn/ 获得一句动漫 ...
- plt.imshow()显示图片色差问题
转载:https://www.cnblogs.com/darkknightzh/p/6039667.html 由于系统缺少某些库,导致cv2.imshow()无法使用,于是使用matplotlib.p ...
- 引用类型之Array(二)
操作方法 concat( ) concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 语法 arrayObject.concat(arrayX,a ...
- 14.深入k8s:kube-proxy ipvs及其源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 这一篇是讲service,但是基础使用以及基本概念由于官方实在是写的 ...
- BUUCTF_web_三
下面还是简单web的入门题 [GKCTF2020]cve版签到 这次的比赛最简单的题了吧,提示是CVE-2020-7066,但是网上没有几个关于这个漏洞的相关利用的文章,似乎是get_header() ...
- .NET Standard 类库的使用技巧
系列目录 [已更新最新开发文章,点击查看详细] 在前一篇博客<.NET Standard中配置TargetFrameworks输出多版本类库>中详细介绍了如何创建.配置.条件编译. ...
- MeteoInfoLab脚本示例:站点填图
打开包含站点填图的站点数据文件(比如micaps 1)之后,用文件对象的smodeldata函数获取StationModel数据对象,然后用stationmodel函数绘制站点填图图层.脚本程序: # ...