- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
好的,这是关于 Casbah 和 MongoDB 基础知识的另一个问题。从数据库中检索 DBObject 后,如何从中提取某些数据?我知道有 DBObject.get()
方法,它返回 java.lang.Object
。我是否必须这样做,然后将数据转换为所需的类型?我不确定这是不是最好的方法...有人可以推荐如何更好地做到这一点吗?
更新:
最后我采用了手动处理所有东西的方式。由于案例类的限制,我没有使用 Salat,因为不建议将案例类用于生 child ,这需要重新安排架构。但是,该答案被标记为最佳答案,因为它适用于大多数情况,并且这里没有其他更通用的答案。
最佳答案
您可以使用 MongoDBObject 的 as
方法来获取值并在一次调用中进行转换:
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..
请注意,如果找不到给定的键,as
会引发异常。您可以使用 getAs
它为您提供 Option[A]
:
obj.getAs[String]("title") match {
case Some(someStr) => ...
case None => ...
}
提取列表有点复杂:
val myListOfInts =
(List() ++ obj("nums").asInstanceOf[BasicDBList]) map { _.asInstanceOf[Int] }
我写了一个helper,让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"
希望对你有帮助。
关于mongodb - Casbah Scala MongoDB 驱动程序 - 从 DBObject 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10470166/
有没有一种简单的方法可以将 List 转换为 MongoDBList(或 BasicDBList)? 最佳答案 scala> val list = List("foo", "bar") list:
我希望使用 Scala 2.9.x 和 Casbah 实现我的 DAO 访问层。鉴于我的实体是一个带有参数的案例类: case class Price (Id: Option[String], Pri
我正在使用 Casbah Scala 驱动程序对 MongoDB 数据库执行 CRUD 操作。我想更新特定文档中的某些字段。我正在使用 findAndModify 方法,但令我惊讶的是,整个文档都被重
我有以下代码: def authenticateByUsername(username: String, password:String): Boolean = { val user = use
在 casbah 中,我看到在 MongoCollection 上定义了以下函数: def insert[A](docs: A*)(implicit dbObjView: (A) ⇒ commons.
我想使用 casbah 执行查询,以查找未设置某个字段(该字段不存在)或该字段具有特定值的所有对象。 我试过用 val query = ("_id.serviceName" $in serviceNa
如何在 Collection#find(/* HERE */) 使用正则表达式,例如: val coll = MongoConnection()("foo")("bar") for(x ".*son
我正在使用 Casbah 连接和查询 Mongo 数据库。现在我正在尝试查询值不为空的字段。 使用直接的 Mongo 语法,我想要的查询是 collection.find({"key" : {$ne
我有一个从 MongoDB 获取端口号的简单代码。我用的是scala,驱动当然是casbah。 def getPortNo : Int { val query = MongoDBObjec
我必须使用 casbah scala 客户端管理与 MongoDb 的多个数据库连接。我有一个可行的近似值但会打开数百个连接。 我想保存一个 Map[String, MongoDB],它为每个数据库保
我已将 casbah 添加到我的依赖项中使用 com.mongodb.casbah casbah_2.8.0 2.1.5.0 然后我就写了一个简单的mongo连接语句 val
我正在使用 Casbah 2.9.2 我的 mongodb 架构如下: [ _id:“三角形”,信息:[颜色:“红色”,线:“细”,UseID:“1”,SourceId:“2”]] 我希望能够编写一个
我在 MongoDB 中有一个如下所示的文档: {"_id":"asdf", "data":[ {"a":"1","b":"2"}, {"a":"3","b":"4"}, {"
在 Play 应用程序中,使用 Salat 和 Casbah,我试图将 DBObject 反序列化为 Task 类型的对象,但是当调用 .asObject: No implicit view avai
我目前正在使用 Casbah 和 MongoDB 来实现网络服务。到目前为止,我没有遇到任何问题。我也在使用 Scala。 但是,我只是想知道是否有比 Casbah 更好的东西来执行大量 find/f
我正在尝试在 find() 中使用 casbah 的流畅查询。 我的数据是这样的: { "_id" : ObjectId("4d7b26efc58bf2b18f14d9cd"), "srcID" :
我正在使用 mongo cashbah Scala 驱动程序,我想在我的代码中使用连接池,但我不确定我的代码是否使用连接池,我也读到我们只需要创建一次 MongoClient 实例并再次重用它,所以我
编译时出现以下错误: [error] (*:update) sbt.ResolveException: unresolved dependency: org.mongodb#casbah_2.11;2
我知道 MongoDB 中的对象可以包含多个级别的数据(就像 JSON 对象一样)。但是,Casbah 驱动程序教程仅涵盖“平面”对象的创建,其中只有一层数据。如何使用 Casbah 创建和使用多级对
我已经使用其命令行客户端在 MongoDB 中定义了一个函数。 function something(){...} 我想知道如何使用 Scala 中的 casbah 执行自定义 MongoDB 函数。
我是一名优秀的程序员,十分优秀!