Scala-Mongodb入门之CRUD
2024-09-06 09:14:00
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/
最新文章
- PHP (sendmail / PHPMailer / ezcMailComposer)发送邮件
- plain framework 1 参考手册 入门指引之 代码风格
- Divide and conquer:Showstopper(POJ 3484)
- 《精通Linux内核必会的75个绝技》知识杂记
- C语言 读取文件中特定数据
- WPF Loader
- OD调试2---TraceMe
- SQL Server 多表删除
- 第三章:初识Jquery
- 75、django之ORM补充
- Linux CentOs集群LVS+Keepalived负载均衡的实现
- java 的序列化和反序列化的问题
- c++常量指针和指针常量的区别
- Session &; Cookie小知识~
- Redis实现的分布式锁和分布式限流
- Flink - InputGate
- oracle创建索引表空间
- c#多线程编程实战(原书第二版)文摘
- android中RecyclerView控件实现瀑布流布局
- Oracle卸载之Win7操作系统下Oracle11g 数据库卸载过程图解
热门文章
- sping ioc 源码分析(二)-- refresh()方法分析
- 最全总结 | 聊聊 Python 数据处理全家桶(Memcached篇)
- Python练习题 046:Project Euler 019:每月1日是星期天
- Python练习题 020:累积累加
- >;>;8) &; 0xFF中的 >;>; 和 &;0xFF 的作用
- CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 树上启发式合并(DSU ON TREE)
- JavaScript封装函数:获取下一个/上一个兄弟元素节点
- RHSA-2017:2679-重要: 内核 安全更新(需要重启、存在EXP、代码执行)
- python`最简单的爬虫`实现
- package.json文件配置说明