2010-11-03 19 views

回答

1

我一直在使用casbah http://api.mongodb.org/scala/casbah/2.0.2/index.html與我的scala swing應用程序中的mongodb對話。

它的安裝和設置非常簡單,而且API非常具有可擴展性。

最難的是理解的MongoDB本身,(從SQL背景的)

+0

是的,卡斯巴工作得很好。最重要的是,你可以使用Salat,使讀/寫嵌套對象到數據庫非常輕鬆見https://github.com/novus/salat和http://repo.novus.com/salat-presentation/#0 Casbah和salat有谷歌組http://groups.google.com/group/mongodb-casbah-users/topics和http://groups.google.com/group/scala-salat。這裏也是一個很好的談話http://skillsmatter.com/podcast/scala/mongodb-jvm – foolshat 2012-01-06 19:58:42

0

我們與卡斯巴適用於深物體或簡單的地圖,並沒有真正的案例類映射支持,所以我們推出的方式有點不滿意我們自己MongoDB Synchronous Scala driver在傳統的java驅動程序的頂部,我想在這裏無恥地插入一個關於如何存儲和檢索一個地圖和一個簡單的案例類的例子。該驅動程序沒有太多的魔力,並且易於安裝,並且具有受Play2 JSON impl啓發的簡單BSON實現。

下面是如何用一些簡單的數值使用它:

val client = MongoClient("hostname", 27017) 
val db = client("dbname") 
val coll = db("collectionname") 

coll.save(Bson.doc("_id" -> 1, "vals" -> Map("key1" -> "val1"))) 
val docOpt = coll.findOneById(1) // => Option[BsonDoc] 

for(doc <- docOpt) 
    println(doc.as[Map[String, String]]("vals")("key1")) // => prints "val1" 

對於一個案例類是一點點複雜,但它是所有手卷並沒有參與,所以你可以做任何你的魔法喜歡你怎麼需要它,即供應商在doc一些較短的鍵名:

case class DnsRecord(host: String = "", ttl: Long = 0, otherProps: Map[String, String] = Map()) 

case object DnsRecord { 
    implicit object DnsRecordToBsonElement extends ToBsonElement[DnsRecord] { 
    def toBson(v: DnsRecord): BsonElement = DnsRecordToBsonDoc.toBson(v) 
    } 

    implicit object DnsRecordFromBsonElement extends FromBsonElement[DnsRecord] { 
    def fromBson(v: BsonElement): DnsRecord = DnsRecordFromBsonDoc.fromBson(v.asInstanceOf[BsonDoc]) 
    } 

    implicit object DnsRecordFromBsonDoc extends FromBsonDoc[DnsRecord] { 
    def fromBson(d: BsonDoc): DnsRecord = DnsRecord(
     d[String]("host"), 
     d[Long]("ttl"), 
     d[Map[String, String]]("op") 
    ) 
    } 

    implicit object DnsRecordToBsonDoc extends ToBsonDoc[DnsRecord] { 
    def toBson(m: DnsRecord): BsonDoc = Bson.doc(
     "host" -> m.host, 
     "ttl" -> m.ttl, 
     "op" -> m.otherProps 
    ) 
    } 
} 

coll.save(DnsRecord("test.de", 4456, Map("p2" -> "val1"))) 
for (r <- coll.findAs[DnsRecord](Bson.doc("host" -> "test.de"))) 
    println(r.host) 
0

至於人們發現這個線程,並有興趣在MongoDB中3.x的更新我們使用的Async驅動程序可以在這裏找到https://github.com/evojam/mongodb-driver-scala。如果您使用的是API,則可以使用新的Play 2.4模塊以Scala方式構建API,但您始終可以只使用驅動程序。

相關問題