Mongodb 和 Scala 的入門指南

fmms 12年前發布 | 34K 次閱讀 Scala MongoDB NoSQL數據庫

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

在本文中,我們將介紹使用 Scala 語言如何與 Mongodb 進行連接與數據處理。

首先需要安裝 Mongodb,很多地方都有介紹,這里不再累贅。一旦 Mongodb 安裝完畢便可以啟動:

vikas@vikas-laptop:~/w/software/archive/mongodb-linux-i686-2.0.2/bin$ mongod
mongod --help for help and startup options
Sat Feb  4 23:19:33 
Sat Feb  4 23:19:33 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Sat Feb  4 23:19:33 

上面是啟動 Mongodb 服務器,為了測試安裝是否成功,我們可以打開另外一個終端并執行下面命令:

vikas@vikas-laptop:~/w/software/archive/mongodb-linux-i686-2.0.2/bin$ mongo
MongoDB shell version: 2.0.2
connecting to: test
> show dbs;
local   0.0625GB
test    0.0625GB
> 

這樣我們就可以寫程序連接到 Mongodb 了,接下來我們編寫一個 Scala 程序。在開始之前需要了解,Scala 需要一個 Mongodb 的驅動包 —— Casbah

如果你正在使用 sbt 0.11x,那么你需要執行下面步驟以便將該驅動包含到 build.scala 中。

object ApplicationBuild extends Build {

    val appName         = "MyCoolApp"
    val appVersion      = "1.0"

    val appDependencies = Seq(
      "com.mongodb.casbah" %% "casbah" % "2.1.5-1",
      // Add your project dependencies here,
    )

    val main = PlayProject(appName, appVersion, appDependencies).settings(defaultScalaSettings:_*).settings(
      // Add your own project settings here      
    )
}

一旦引入該驅動,就可以寫一個簡單的應用來訪問 Mongodb 數據庫:

import com.mongodb.casbah.Imports._

object MongoTest extends App {

  connectToMongo

  def connectToMongo {
    val mongoConn = MongoConnection()
    val mongoColl = mongoConn("test")("vikas")
    val bread1 = MongoDBObject("name" -> "parrys",
      "price" -> "10 INR")
    val bread2 = MongoDBObject("name" -> "breadAndMore")
    mongoColl += bread1
    mongoColl += bread2
    mongoColl.find()

    for { x <- mongoColl } yield println("value "+ x)
  }
}

上面這個小程序主要執行以下幾個步驟:

1. 連接到名為 test 的數據庫的 vikas 集合(相當于SQL數據庫中的表)

2. 創建一個 MongoCollection 并添加 MongoDBObjects 到集合中:mongoColl += bread1. 這一步相當于往表中插入文檔,接下來查找剛插入的文檔。

執行結果:

23:34:41.072 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Registering Scala Conversions.
23:34:41.076 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Deserializers for Scala Conversions registering
23:34:41.077 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Serializers for Scala Conversions registering
23:34:41.078 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Setting up OptionSerializer
23:34:41.114 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Setting up ScalaJCollectionSerializer
23:34:41.158 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Setting up ScalaRegexSerializers
23:34:41.159 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Hooking up scala.util.matching.Regex serializer
23:34:41.160 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Reached base registration method on MongoConversionHelper.
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Registering Scala Conversions.
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Deserializers for Scala Conversions registering
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Serializers for Scala Conversions registering
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Setting up OptionSerializer
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Setting up ScalaJCollectionSerializer
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Setting up ScalaRegexSerializers
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Hooking up scala.util.matching.Regex serializer
23:34:41.626 [main] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ - Reached base registration method on MongoConversionHelper.
value { "_id" : { "$oid" : "4f2d733944ae57332d00eb55"} , "name" : "parrys" , "price" : "10 INR"}
value { "_id" : { "$oid" : "4f2d733944ae57332d00eb56"} , "name" : "breadAndMore"}

如果我們返回終端可以通過下面命令來查詢剛插入的文檔:

vikas@vikas-laptop:~/w/software/archive/mongodb-linux-i686-2.0.2/bin$ mongo
MongoDB shell version: 2.0.2
connecting to: test
> use test
switched to db test
> db["vikas"].find()
{ "_id" : ObjectId("4f2d733944ae57332d00eb55"), "name" : "parrys", "price" : "10 INR" }
{ "_id" : ObjectId("4f2d733944ae57332d00eb56"), "name" : "breadAndMore" }
> 

另外有一個 MongoDB 的 ORM 框架 for Scala ,詳情請看 salat

文章譯自:knoldus.wordpress.com

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!