目的:如何使用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. PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能

    PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 网上很多正则表达式只能获取或者替换一个img的src内容,或者只能替换固定的字符串,要动态替换多个图片内容的试了几个小时 ...

  2. tensorflow -gpu安装,史上最新最简单的途径(不用自己装cuda,cdnn)

    tensorflow -gpu安装首先,安装Anoconda1. 官网下载点我: 2.安装 点击 python 3.6 version自动下载x64版,下载好之后,然后安装. 如图,打上勾之后,一路n ...

  3. javaObject类

    所有类的公共父类,一旦一个类没有显示地继承一个类则其直接父类一定是Object. 一切数据类型都可用Object接收 class OOXX  extends Object{}等价于class ooXX ...

  4. eclipse本地启动tomcat报错集锦

    1.eclipse本地添加tomcat服务器    打开Eclipse,单击“window”菜单,选择下方的“Preferences”: 找到Server下方的Runtime Environment, ...

  5. 802.1X的体系结构

  6. es6笔记 day3---对象简介语法以及对象新增

    以前的老写法↓ 新写法来了↓ 提示:千万不要手贱,在里面去用箭头函数!!! -------------------------------------------------------------- ...

  7. <% %>、<%! %>和<%= %>

    <%  %> 此标签内的内容在jsp编译的时候,将被编译成servlet的_jspService()方法.这个方法用作服务器端向客户端输出.因此这对标签里边不能在定义方法了,因为在Java ...

  8. Lede定时重拨

    系统,计划任务,   0 4 * * * ifup wan 梅林定时重拨: #! /bin/sh #断开拨号连接 killall pppd #延时10秒 #重新拨号 pppd >& &a ...

  9. Nodejs模拟并发,尝试的两种解决方案

    一.准备数据库表 创建商品库存表 db_stock ,插入一条数据 DROP TABLE IF EXISTS `db_stock`; CREATE TABLE `db_stock` ( `id` ) ...

  10. 简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用

    这是简易数据分析系列的第 15 篇文章. 年末事情比较忙,很久不更新了,后台一直有读者催更,我看了一些读者给我的私信,发现一些通用的问题,所以单独写篇文章,介绍一些 Web Scraper 的进阶用法 ...