Лучший драйвер mongodb для Play Framework 2.1
Какой лучший драйвер MongoDB для Play Framework 2.1?
Сейчас я пробую ReactiveMongo, но нигде не могу найти хорошую документацию, и у меня есть сомнения по поводу ее дальнейшего развития.
Какой драйвер самый популярный и поддерживаемый?
Спасибо,
Джорджия
3 ответа
Я не делал никаких сравнений, так что я бы не стал утверждать, что он лучший, но когда я начал свой текущий проект, был только salat с его Play! плагин. Он довольно хорошо задокументирован (см. Его github wiki) и находится в стадии активной разработки. Я бы сказал, что это качество производства. Если вам не хватает документации, в репозитории есть примеры использования в тестовых пакетах.
Мы были недовольны тем, как Casbah работает с глубокими объектами или простыми картами, и отсутствием реальной поддержки отображения классов дел, поэтому мы свернули наш собственный драйвер MongoDB Synchronous Scala поверх устаревшего java-драйвера, который я хотел бы бесстыдно подключить здесь с примером о том, как хранить и извлекать карту и простой класс дела. Драйвер не обладает большой магией, прост в настройке и имеет простую реализацию BSON, которая была основана на Play2 JSON Impl.
Вот как использовать его с некоторыми простыми значениями:
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 требуется некоторое сопоставление, но это было дизайнерское решение, которое мы приняли, потому что мы хотели, чтобы сопоставление было полностью настраиваемым без понимания какой-либо реальной структуры:
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. Я реализую эту библиотеку с моими коллегами в рамках другого проприетарного проекта. Библиотека сейчас используется в производстве. Отсутствует документация, но она чрезвычайно полезна и очень проста. Вы можете посмотреть на тесты, а не на документацию, и есть небольшой пример простого использования.