目的:如何使用MongoDB之前提供有关Scala驱动程序及其异步API。

1、现有条件

注:Scala13太新,driver2.6.0是在Scala2.12中的

2、添加依赖包

libraryDependencies := Seq(
"org.mongodb.scala" %% "mongo-scala-driver" % "2.6.0",
"com.lightbend.akka" %% "akka-stream-alpakka-mongodb" % "0.20"
)

  

3、连接mongodb

 //方法1:简单连接
val client1=MongoClient("mongodb://192.168.1.135:27017") //方法2:可添加条件的连接(.build()前面)
val settings: MongoClientSettings = MongoClientSettings.builder()
.applyToClusterSettings(b => b.hosts(List(new ServerAddress("192.168.1.135")).asJava))
.build()
val mongoClient: MongoClient = MongoClient(settings)

  

4、选择database、collection

 val database: MongoDatabase = mongoClient.getDatabase("testdb")
val collection:MongoCollection[Document]=database.getCollection("test")

 然后Document可以通过CanbeBsonElement构建。CanbeBsonElement是一种key/value结构

 val Lily=Document("id"->1,"name"->"Lily","age"->22)
val Luzy=Document("city"->"shenzhen","capital"->"beijin","age"->"Luzy")

  

5、数据操作

  • 订阅
//在API中,Observables都是“冷”流,在订阅之前不会发生任何事情。可以把数据库中各种操作如find、insertOne等都是一个Observable
val addLily: Observable[Completed] =collection.insertOne(Lily)
val addLuzy=collection.insertOne(Luzy) //1、addLily
//Scala API使用Observer模式的自定义实现异步编程
//Observable订阅并且请求的数据才会发生操作
addLily.subscribe(new Observer[Completed]{
override def onComplete():Unit=println("insert lily complete.")
override def onNext(result: Completed):Unit=println("insert lily sucessful!")
override def onError(e:Throwable):Unit=println(s"insert error:${e.getMessage}")
})
  • Helper(内含headResult等方法)的headResult
 //2、addLuzy

    def headResult(observable: Observable[Completed])=Await.result(observable.head(),2 seconds)
val r1=headResult(addLuzy)
  • onComplete
// 删除文件

 val deleteAll=collection.deleteMany(notEqual("id",1))
deleteAll.head.onComplete{
case Success(v)=>println(s"delete successful $v")
case Failure(e)=>println(s"delete error:${e.getMessage}")
} //异步读取
scala.io.StdIn.readLine()

  

6、还有增删改查之类各种文档、索引等操作

http://mongodb.github.io/mongo-scala-driver/2.6/getting-started/quick-tour/

7、关闭连接

mongoClient.close()

  

Scala与Mongodb实践1-----mongodbCRUD的更多相关文章

  1. Scala与Mongodb实践2-----图片、日期的存储读取

    目的:在IDEA中实现图片.日期等相关的类型在mongodb存储读取 主要是Scala和mongodb里面的类型的转换.Scala里面的数据编码类型和mongodb里面的存储的数据类型各个不同.存在类 ...

  2. Scala与Mongodb实践4-----数据库操具体应用

    目的:在实践3中搭建了运算环境,这里学会如何使用该环境进行具体的运算和相关的排序组合等. 由数据库mongodb操作如find,aggregate等可知它们的返回类型是FindObservable.A ...

  3. Scala与Mongodb实践3-----运算环境的搭建

    目的:使的在IDEA中编辑代码,令代码实现mongodb运算,且转换较为便捷 由实验2可知,运算环境的搭建亦需要对数据进行存储和计算,故需要实现类型转换,所以在实验2的基础上搭建环境. 由菜鸟教程可得 ...

  4. 使用Scala操作Mongodb

    介绍 Scala是一种功能性面向对象语言.它融汇了很多前所未有的特性.而同一时候又执行于JVM之上.随着开发人员对Scala的兴趣日增,以及越来越多的工具支持,无疑Scala语言将成为你手上一件不可缺 ...

  5. Scala对MongoDB的增删改查操作

    =========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...

  6. 【Scala】Scala多线程-并发实践

    Scala多线程-并发实践 scala extends Thread_百度搜索 scala多线程 - 且穷且独立 - 博客园 Scala和并发编程 - Andy Tech Talk - ITeye博客 ...

  7. Scala操作MongoDB

    Scala操作MongoDB // Maven <dependencies> <dependency> <groupId>org.mongodb</group ...

  8. WebFlux 集成 Thymeleaf 、 Mongodb 实践 - Spring Boot(六)

    这是泥瓦匠的第105篇原创 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-5-thymeleaf ...

  9. Spring Boot WebFlu-05——WebFlux 中 Thymeleaf 和 MongoDB 实践

    第05课:WebFlux 中 Thymeleaf 和 MongoDB 实践 前言 本节内容主要还是总结上面两篇内容的操作,并实现一个复杂查询的小案例,那么没安装 MongoDB 的可以进行下面的安装流 ...

随机推荐

  1. Eclipse设置默认编码为UTF-8

    需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...

  2. java 集合类 & 容器

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储 ...

  3. Java 自带性能监控工具:监视和管理控制台 jconsole 的使用

    1. 前言想验证你对 jvm 配的一些调优参数(比如 Xms.Xmx 等)有没有起作用吗?想不想实时监控你自定义的线程池的在实际运行时的线程个数.有没有死锁?应用出现 java.lang.OutOfM ...

  4. 【codeforces 764B】Timofey and cubes

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. UVA 437 "The Tower of Babylon" (DAG上的动态规划)

    传送门 题意 有 n 种立方体,每种都有无穷多个. 要求选一些立方体摞成一根尽量高的柱子(在摞的时候可以自行选择哪一条边作为高): 立方体 a 可以放在立方体 b 上方的前提条件是立方体 a 的底面长 ...

  6. VScode快捷键(最全)

    按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + ...

  7. 类(class)和继承

    .继承之前的写法 ↓ ----------------------------------------------------------------------------------------- ...

  8. LightOJ - 1287 Where to Run (期望dp+记忆化)

    题面: Last night you robbed a bank but couldn't escape and when you just got outside today, the police ...

  9. SRTE测试

    网络拓扑: XRV1 ======================================================================= hostname XRV1expl ...

  10. 第二阶段:2.商业需求文档MRD:4.MRD-核心目标-产品构成

    竞争对手分析很重要.之后单独讲解.产品经理时刻要关注竞争产品的状态. 1.不同于PRD.这里只是概况.2.产品前景的核心目标就是:KPI(用户使用量:安装量,卸载量,日活数)跟ROI(开发人力,时间, ...