zoukankan      html  css  js  c++  java
  • 使用Scala操作Mongodb

    介绍

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

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库其中功能最丰富,最像关系数据库的。他支持的数据结构很松散,是类似jsonbson格式。因此能够存储比較复杂的数据类型。

    Mongo最大的特点是他支持的查询语言很强大,其语法有点类似于面向对象的查询语言,差点儿能够实现类似关系数据库单表查询的绝大部分功能,并且还支持对数据建立索引

    在本文中。我们将介绍使用 Scala 语言怎样与 Mongodb 进行连接与数据处理。

    环境安装与配置

    第一。  安装Mongodb和Scala,假设已经安装。能够跳过这一步。详细安装步骤请自行搜索。

    第二。  安装SBT。SBT是Scala中的构建工具。作用相当于Maven。

    安装比較简单,详细步骤请參考:http://www.scala-sbt.org/0.13/tutorial/zh-cn/Setup.html

    第三,  等安装完毕后。在控制台运行sbt命令,出现类似下面的信息就能够了:

    [root@centos6 scala-project]# sbt

    [info] Loading global plugins from /root/.sbt/0.13/plugins

    [info] Set current project to Casbah Tutorial (in buildfile:/home/apache/src/scala-project/)

    第四:创建一个測试项目,并载入Casbah库。Casbah是Mongodb的scala driver

    mkdir test-project

    cd test-project

    vi build.sbt,输入:

    name := "Casbah Test"

    version := "1.0"

    scalaVersion := "2.11.2"

    libraryDependencies += "org.mongodb" %% "casbah"% "2.7.3"

    注意:build.sbt文件里每行要有一个空行切割。

    如有问题请參考http://mongodb.github.io/casbah/guide/installation.html

    完毕后输入命令:sbtconsole,第一次执行会自己主动下载casbah及依赖的其他库,载入完毕后例如以下类似例如以下的信息就能够了。

    Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM,Java 1.7.0_13).

    Type in expressions to have them evaluated.

    Type :help for more information.

    scala>

    连接Mongodb

    载入scala shell:sbt console

    importcom.mongodb.casbah.Imports._

    val mongoClient= MongoClient("localhost", 27017)

    注意:能够在控制台输入mongoClient. + 空格键,系统会自己主动提示可用的操作。

    支持多种连接方式:

    1.      简单方式

    // Connect to default - localhost, 27017

    val mongoClient =  MongoClient()

    // connect to "mongodb01" host, default port

    val mongoClient = MongoClient("mongodb01")

    // connect to "mongodb02" host, port 42017

    val mongoClient = MongoClient("mongodb02", 42017)

    2.      URI方式

    val uri = MongoClientURI("mongodb://localhost:27017/")

    val mongoClient = MongoClient(uri)

    3.      支持权限验证方式

    //Challenge Response

    valserver = new ServerAddress("localhost", 27017)

    valcredentials = MongoCredential.createMongoCRCredential(userName, database,password)

    valmongoClient = MongoClient(server, List(credentials))

    // X.509Protocol

    valserver = new ServerAddress("localhost", 27017)

    valcredentials = MongoCredential.createMongoX509Credential(userName)

    valmongoClient = MongoClient(server, List(credentials))

    很多其它连接信息,请參考:http://mongodb.github.io/casbah/guide/connecting.html

    我们在Mongodb中创建一个test_db的数据库和test collection,并选择简单的用户password方式,例如以下:

    val server = newServerAddress("localhost", 27017)

    val credentials =MongoCredential.createMongoCRCredential(“user”, “test_db”, “pass”.toArray)

    val mongoClient= MongoClient(server, List(credentials))

    出现类似例如以下信息即连接成功:

    res2:com.mongodb.casbah.MongoClient = com.mongodb.casbah.MongoClient@42143c61

    获取数据库和连接:

    val db = mongoClient("test_db")

    db.collectionNames

    val coll = db("test")

    增删改查操作

     

    添加

    val user1 = MongoDBObject("name"-> "user1")

    val user2 = MongoDBObject("name"-> "user2")

    coll.insert(user1)

    coll.insert(user2)

    读取

    coll.count() //读取总记录数

    也能够使用find读取记录,比方读取全部记录并打印出来:

    coll.find().foreach(println)

    val query1 =MongoDBObject("name"->"user1")

    coll.findOne(query1)

    更新

    val update1 =MongoDBObject("email"->"user1@test.com")

    val result1 = coll.update(query1,update1)

    println( "Number updated: " +result.getN )

    或者val result = coll.update( query, update, upsert=true )//upsert=true,假设不存在就insert

    删除

    val query2 = MongoDBObject(“name”->”user2”)

    val result2 = coll.remove(query2)

    删除集合

    coll.drop()

    很多其它使用方法请參考casbah的用户文档http://mongodb.github.io/casbah/index.html

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    如何用tar和gpg创建压缩加密的档案文件
    如何用Virt-rescue拯救虚拟机?
    如何在Linux中使用命令管理已安装的软件包?
    leetcode TOP100 字母异位词分组
    剑指offer 1-5
    XCTF(MISC) 坚持60s
    XCTF(MISC) give_you_flag
    XCTF MISC 如来十三掌
    XCTF(MISC) 图片隐写
    XCTF csaw2013reversing2
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4676083.html
Copyright © 2011-2022 走看看