适用于Play Framework 2.1的最佳mongodb驱动程序



Play Framework 2.1的最佳MongoDB驱动程序是什么?

我现在正在尝试ReactiveMongo,但我在任何地方都找不到好的文档,我对它的未来发展心存疑虑。

哪个驱动程序最受欢迎和支持?

谢谢,

GA

我没有做任何比较,所以我不会说它是最好的,但当我开始我当前的项目时,只有salat的Play!插件。它有很好的文档记录(参见githubwiki),并且正在积极开发中。我认为它具有生产质量。如果文档对您来说不够,那么存储库中的测试套件中会有一些使用示例。

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

您可以尝试使用Moscale,作为另一个专有项目的一部分,我用我的colegues实现了这个库。现在生产中使用库。虽然缺少文档,但它非常有用,而且非常简单。您可以查看测试,而不是文档,这里有一个简单用法的简短示例。

最新更新