Casbah Scala MongoDB驱动程序 – 从DBObject获取数据
发布时间:2020-12-16 08:48:46 所属栏目:安全 来源:网络整理
导读:好的,这是另一个关于Casbah和MongoDB基础知识的问题.从数据库中检索DBObject后,如何从中提取某些数据?我知道有DBObject.get()方法,它返回 java.lang.Object.我是否必须这样做,然后将数据转换为所需的类型?我不确定这是最好的方法吗…任何人都可以建议如何
好的,这是另一个关于Casbah和MongoDB基础知识的问题.从数据库中检索DBObject后,如何从中提取某些数据?我知道有DBObject.get()方法,它返回
java.lang.Object.我是否必须这样做,然后将数据转换为所需的类型?我不确定这是最好的方法吗…任何人都可以建议如何更好地做到这一点?
更新: 最后,我采用了手动处理所有内容的方式.我没有使用Salat,因为案例类限制,因为不建议使用案例类来生孩子,这需要架构重新安排.然而,答案被标记为最佳答案,因为它在大多数情况下都有效,而且这里没有其他更一般的答案. 解决方法
您可以使用MongoDBObject作为方法来获取值并将其转换为一次调用:
val coll = MongoConnection()(dbName)(collName) val query = MongoDBObject("title" -> "some value") val obj = coll findOne query val someStr = obj.as[String]("title") val someInt = obj.as[Int]("count") // and so on.. 请注意,如果找不到给定的密钥,则抛出异常.您可以使用getAs为您提供选项[A]: obj.getAs[String]("title") match { case Some(someStr) => ... case None => ... } 提取列表有点复杂: val myListOfInts = (List() ++ obj("nums").asInstanceOf[BasicDBList]) map { _.asInstanceOf[Int] } 我写了一个帮手,这使得使用casbah更加有用,可能会有所帮助,所以我附上它: package utils import com.mongodb.casbah.Imports._ class DBObjectHelper(underlying: DBObject) { def asString(key: String) = underlying.as[String](key) def asDouble(key: String) = underlying.as[Double](key) def asInt(key: String) = underlying.as[Int](key) def asList[A](key: String) = (List() ++ underlying(key).asInstanceOf[BasicDBList]) map { _.asInstanceOf[A] } def asDoubleList(key: String) = asList[Double](key) } object DBObjectHelper { implicit def toDBObjectHelper(obj: DBObject) = new DBObjectHelper(obj) } 您可以使用这样的帮助: val someStr = obj asString "title" val someInt = obj asInt "count" val myDoubleList = obj asDoubleList "coords" 我希望它会对你有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |