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

5

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

我目前正在尝试ReactiveMongo,但是我无法在任何地方找到好的文档,并且我对它未来的开发有疑虑。

哪个驱动程序最受欢迎并得到支持?

谢谢,

GA


我找不到好的文档。很遗憾,这是事实。而且我对其未来发展持怀疑态度。它是最有前途的MongoDB驱动程序,对于其未来毫无疑问。 - Julien Lafont
Scala 社区热衷于 "反应式宣言" 之类的东西,如果 ReactiveMongo 没有未来,我个人会非常惊讶。当我进行相同的练习时,ReactiveMongo Google 群组的活动比 Salat 群组更加频繁。然而,我分享你的观察,Salat 的文档比 ReactiveMongo 更好,因此入门会更容易。这只是我的看法,先生。 - Bob Kuhar
有人知道在Java中是否有良好的Mongo ORM可以使用吗? - user1876508
3个回答

3

我没有做任何比较,所以不会声称它是最好的,但当我开始我的当前项目时,只有salat和它的Play!插件。它有相当完善的文档(请参见其Github Wiki),并且正在积极开发中。我认为它具有生产质量。如果文档对您不够清晰,存储库中的测试套件中有使用示例。


1
我们对Casbah处理深层对象或简单映射的方式感到不满意,也没有真正的案例类映射支持,因此我们在旧版Java驱动程序的基础上自己开发了MongoDB同步Scala驱动程序。在这里,我想不要顾虑地介绍一下它,并提供一个存储和检索映射和简单案例类的示例。该驱动程序没有太多魔法,易于设置,并且具有一个受Play2 JSON实现启发的简单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)

0
你可以尝试使用Moscale。我和我的同事们一起开发了这个库,作为另一个专有项目的一部分。现在该库已经在生产中使用。虽然缺乏文档,但它非常实用且非常简单。您可以查看tests,而不是文档,并提供了一个简单使用的短例子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接