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