哪个库最适合使用Scala的MongoDB?
我想将MongoDB与Scala一起使用。 我找到了两个图书馆哪个库最适合使用Scala的MongoDB?,scala,mongodb,Scala,Mongodb,我想将MongoDB与Scala一起使用。 我找到了两个图书馆 电梯门戈 mongo scala驱动程序 你能告诉我哪个图书馆最好用吗? 如果你知道的话,请告诉我另一个。你应该仔细看看Casbah,它是官方(并且完全支持)MongoDB Scala驱动程序: 作为项目的创建者和维护者,我承认我有偏见,但是官方的支持带来了很多好处,包括它背后有一个全职的开发人员。DBObject的常见Scala类型和Scala集合样式实现内置了固态类型转换包装器,这比许多其他驱动程序使用的默认Java对象要好得
如果你知道的话,请告诉我另一个。你应该仔细看看Casbah,它是官方(并且完全支持)MongoDB Scala驱动程序: 作为项目的创建者和维护者,我承认我有偏见,但是官方的支持带来了很多好处,包括它背后有一个全职的开发人员。DBObject的常见Scala类型和Scala集合样式实现内置了固态类型转换包装器,这比许多其他驱动程序使用的默认Java对象要好得多。还有一个完整的查询dsl,它映射到Mongo查询语法 我也喜欢电梯,最近开始与电梯团队合作,帮助提升电梯。Foursquare刚刚发布了一个名为Rogue的lift mongo记录查询dsl,该记录驱动他们自己的Scala+MongoDB系统:
我发现大多数人使用电梯或Casbah,但YMMV。如果你需要更多的帮助,请随时打电话给我 作为Casbah的公正用户,我现在说,一定要使用Casbah 检查它:
val mongo = MongoConnection()
val coll = mongo("myDB")("myCollection")
val builder = MongoDBObject.newBuilder
builder += "username" -> "Janx"
builder += "comment" -> "Casbah is cool!"
coll += builder.result.asDBObject
那当然只是一种味道。使用它非常令人耳目一新,特别是如果您来自Java驱动程序。由于它现在是由10Gen和才华横溢的McAdams先生支持的Scala驱动程序,所以它真的是一款不需要动脑筋的产品。干杯 我们对Casbah处理深度对象或简单映射的方式有点不满意,并且没有真正的案例类映射支持,因此我们在遗留java驱动程序的基础上推出了自己的驱动程序,我想在这里无耻地插入一个关于如何存储和检索映射和简单案例类的示例。该驱动程序没有太多的魔力,易于设置,并具有一个简单的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"
val client=MongoClient(“主机名”,27017)
val db=客户机(“数据库名”)
val coll=db(“collectionname”)
coll.save(Bson.doc(“\u id”->1,“vals”->Map(“key1”->“val1”))
val docOpt=coll.findOneById(1)/=>Option[BsonDoc]
对于(文件打印“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)
case类DnsRecord(host:String=”“,ttl:Long=0,otherProps:Map[String,String]=Map())
案例对象DNS记录{
隐式对象DnsRecordToBsonElement扩展了ToBsonElement[DnsRecord]{
def toBson(v:DnsRecord):bsonement=DnsRecordToBsonDoc.toBson(v)
}
隐式对象DnsRecordFromBsonElement扩展自BsonElement[DnsRecord]{
def fromBson(v:bsonement):DnsRecord=DnsRecordFromBsonDoc.fromBson(v.asInstanceOf[BsonDoc])
}
隐式对象DnsRecordFromBsonDoc从BsonDoc[DnsRecord]扩展而来{
来自BSON的def(d:BsonDoc):DnsRecord=DnsRecord(
d[字符串](“主机”),
d[长](“ttl”),
d[Map[String,String]](“op”)
)
}
隐式对象DnsRecordToBsonDoc扩展了ToBsonDoc[DnsRecord]{
def toBson(m:DnsRecord):BsonDoc=Bson.doc(
“主机”->m.host,
“ttl”->m.ttl,
“op”->m.otherProps
)
}
}
coll.save(DnsRecord(“test.de”,4456,Map(“p2”->“val1”))
(r“test.de”))
println(r.host)
ReactiveMongo呢?()Rogue似乎被抛弃了-上次提交是在6个月前。@Brendan W.McAdams casbah可以用于异步调用吗?现在仍然推荐casbah吗?从上一页,据说Casbah是MongoDB的传统Scala驱动程序。