天天看點

使用Scala操作Mongodb

介紹

Scala是一種函數式面向對象語言,它融彙了許多前所未有的特性,而同時又運作于JVM之上。随着開發者對Scala的興趣日增,以及越來越多的工具支援,無疑Scala語言将成為你手上一件必不可少的工具。

MongoDB是一個介于關系資料庫和非關系資料庫之間的産品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支援的資料結構非常松散,是類似json的bson格式,是以可以存儲比較複雜的資料類型。Mongo最大的特點是他支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

在本文中,我們将介紹使用 Scala 語言如何與 Mongodb 進行連接配接與資料處理。

環境安裝與配置

第一,  安裝Mongodb和Scala,如果已經安裝,可以跳過這一步。具體安裝步驟請自行搜尋。

第二,  安裝SBT,SBT是Scala中的建構工具,作用相當于Maven。安裝比較簡單,具體步驟請參考:http://www.scala-sbt.org/0.13/tutorial/zh-cn/Setup.html

第三,  等安裝完成後,在控制台執行sbt指令,出現類似以下的資訊就可以了:

[[email protected] 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,并選擇簡單的使用者密碼方式,如下:

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 = [email protected]

擷取資料庫和連接配接:

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"->"[email protected]")

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

繼續閱讀