Play Framework 2.1 に最適な MongoDB ドライバーは何ですか?
現時点で ReactiveMongo を試していますが、適切なドキュメントがどこにも見つからず、将来の開発について疑問があります。
最も人気があり、サポートされているドライバーはどれですか?
ありがとう、
GA
Play Framework 2.1 に最適な MongoDB ドライバーは何ですか?
現時点で ReactiveMongo を試していますが、適切なドキュメントがどこにも見つからず、将来の開発について疑問があります。
最も人気があり、サポートされているドライバーはどれですか?
ありがとう、
GA
比較はしていないので、それが最高だとは言いませんが、現在のプロジェクトを開始したときは、Play!のサラットしかありませんでした。プラグイン。非常によく文書化されており (github wiki を参照)、活発に開発されています。私はそれが生産品質を持っていると思います。ドキュメントだけでは不十分な場合は、リポジトリ内のテスト スイートに使用例があります。
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)