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的更多相关文章

  1. MongoDB入门实践

    MongoDB入门实践 简单介绍MongoDB,包括MongoDB的使用场景.和MySQL的对比.安装部署.Java客户端访问及总结 MongoDB? 我们遵循需求驱动技术的原则,通过一个场景来引入M ...

  2. MongoDB 入门之基础 DCL

    此文章主要记录部分主要的 MongoDB 的 DCL 操作. MongoDB 默认不需要用户名和密码就可以用 mongodb.exe 登录 一.开启 MonogoDB 的权限模式 修改 MongoDB ...

  3. MongoDB入门三:MongoDB shell

    MongoDB shell MongDB shell是一个功能完备的Javascript解释器,可以运行Javascript程序.也可以用于连接MongoDB服务器,执行脚本,对数据库进行操作.类似于 ...

  4. MongoDB入门三步曲1--安装、基本操作

    mongodb 基本操作 目录 mongodb安装 mongod启动 mongo shell启动 mongod 停止 mongodb基本操作:CRUD 数据插入 数据查询 数据更新 数据删除 集合删除 ...

  5. MongoDB 入门之查询(find)

    MongoDB 入门之查询(find) 1. find 简介 (1)find的第一个参数决定了要返回哪些文档. 空的查询文档会匹配集合的全部内容.默认就是{}.结果将批量返回集合c中的所有文档. db ...

  6. MongoDB入门简介

    MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...

  7. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  8. mongodb入门教程

    title: mongodb入门教程 date: 2016-04-06 14:47:18 tags: --- 为什么要认识呢,因为这玩意就一傻逼 借用一下百科的介绍 MongoDB 是一个介于关系数据 ...

  9. MongoDb 入门教程

    MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...

  10. MongoDB入门必读(概念与实战并重)

    MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...

随机推荐

  1. RabbitMq如何确保消息不丢失

    上篇写了掌握Rabbitmq几个重要概念,从一条消息说起,这篇来总结关于消息丢失让人头痛的事情.网络故障.服务器重启.硬盘损坏等都会导致消息的丢失.消息从生产到消费主要结果以下几个阶段如下图. ①生产 ...

  2. 给select赋值的一种方法

    做毕设遇到的问题,在update数据的时候,要先把原来的数据传递给前台,赋值给input等标签,但是啊,select标签没有value属性啊,所以在这里研究了一下,总结一个给select赋值的方法吧 ...

  3. DIV垂直滚动效果源码

    <div id="demo" style="width: 300; overflow: hidden; line-height:24px; height: 100p ...

  4. LiteOS-任务篇-源码分析-系统启动函数

    目录 前言 链接 参考 开启调度 LOS_Start 函数源码 osTickStart 函数源码 LOS_StartToRun 函数源码 前言 20201009 移植好内核后,开始实战内核. 源码分析 ...

  5. Vue路由History模式分析

    Vue路由History模式分析 Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,通过引入Vue-router对象模块时配置mode属性可以 ...

  6. 极简 Node.js 入门 - 4.5 双工流

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. shell-变量的字串应用技术

    1. 变量子串的常用操作 常用操作如下表: 依次举例说明: 定义aa变量,内容为"I am scajy" [root@1-241 script]# aa="I am sc ...

  8. cocos creator屏幕适配的一些知识点

    一. cocos creator 提供的几种适配策略 EXACT_FIT: 整个应用程序在指定区域可见,无需尝试保留原始纵横比.可能会出现失真,应用程序会被拉伸或压缩.也就是说设计分辨率的长和宽不会等 ...

  9. (OK) Android内核(4.9)集成最新版MPTCP---成功

    Android内核(4.9)集成最新版MPTCP---成功

  10. 3.字符设备led驱动

    1.硬件原理图 由图可知,led1,led2,led3,led4,分别对应GPB5,GPB6,GPB7,GPB8,由s3c2440芯片手册可得到如下图所示,分别配置GPBCON和GPBDAT即可 2. ...