zoukankan      html  css  js  c++  java
  • Scala与Mongodb实践1-----mongodbCRUD

    目的:如何使用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()
    

      

  • 相关阅读:
    红黑树的修正过程
    配置文件elasticsearch.yml详解
    HEAD插件安装
    css reset.css
    vue-router之router-link
    vue2.0 代码功能片段
    vue2.0的常用功能简介
    electron 的中文文档的地址 以及 窗口改变的步骤
    ph 的使用步骤
    git 提交的步骤
  • 原文地址:https://www.cnblogs.com/0205gt/p/11096897.html
Copyright © 2011-2022 走看看