我可以使用哪个驱动程序访问scala swing应用程序中的mongodb?

时间:2010-11-03 12:40:05

标签: scala

HI .. 我正在使用scala n mongodb。 现在我想在scala swing应用程序中访问mongodb数据库。 那么我可以使用哪些驱动程序呢? 哪个可以轻松工作? 请回复

3 个答案:

答案 0 :(得分:1)

我一直在使用casbah http://api.mongodb.org/scala/casbah/2.0.2/index.html与我的scala swing应用程序中的mongodb交谈。

安装和设置非常简单,并且API非常易于使用。

最难的部分是了解mongodb本身(来自sql背景)

答案 1 :(得分:0)

我们对Casbah用于深层对象或简单地图的方式以及没有真正的案例类映射支持感到不满意所以我们在遗留的java驱动程序之上滚动了我们自己的MongoDB Synchronous Scala driver,我想无耻地插入这里有一个关于如何存储和检索地图以及简单案例类的示例。该驱动程序没有太大的魔力,并且易于设置,并且具有受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"

对于一个案例类,它有点复杂,但它全部是手动的,没有任何魔法,所以你可以做任何你喜欢的事情以及你需要它,即在文档中提供一些较短的键名:

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)

答案 2 :(得分:0)

作为人们发现此帖子并对MongoDB 3.X感兴趣的更新。我们正在使用Async驱动程序,可在此处找到https://github.com/evojam/mongodb-driver-scala。如果你正在使用新的Play 2.4模块,那么它的代码是用Scala方式构建的,但是你总是只能使用它。