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/

posted @ 2020-09-08 10:13  海龟壳  阅读(237)  评论(0)    收藏  举报