【问题标题】:Best mongodb driver for Play Framework 2.1Play Framework 2.1 的最佳 mongodb 驱动程序
【发布时间】:2013-07-06 18:13:52
【问题描述】:

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

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

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

谢谢,

GA

【问题讨论】:

  • I cannot find good documentation 不幸的是,这是真的。 and I have my doubts about its future development它是最有前途的MongoDB驱动程序,它的未来毫无疑问。
  • Scala 人群对“Reactive Manifesto”的东西很感兴趣,如果 ReactiveMongo 没有未来,我个人会感到非常惊讶。当我做同样的练习时,ReactiveMongo Google Group 比 Salat 组有更多的活动。然而,我同意你的观察,Salat 比 ReactiveMongo 有更好的文档记录,所以开始使用它会更容易。只是我的意见......男人。
  • 有谁知道在java中是否有不错的mongo ORM?

标签: mongodb scala playframework-2.1 mongodb-scala


【解决方案1】:

我没有进行任何比较,所以我不会声称它是最好的,但是当我开始我当前的项目时,只有salat 和它的Play! plugin。它有很好的文档记录(参见它的 github wiki)并且正在积极开发中。我会说它具有生产质量。如果文档对您来说不够用,可以在存储库的测试套件中找到使用示例。

【讨论】:

    【解决方案2】:

    我们对 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)
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用Moscale 我与同事一起实现了这个库,作为另一个专有项目的一部分。库现在用于生产。缺乏文档,但它非常有用且非常简单。您可以查看tests,而不是文档,并且有一个简单用法的简短示例。

      【讨论】:

        猜你喜欢
        • 2013-04-11
        • 2016-03-13
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多