Casbah scala嵌套文档打印
Casbah scala nested document print
我是 Casbah 和 scala 的新手。我如何访问scala中的嵌套文档?我在这里定义了几个字段,如您所见,货币和比率是嵌套文档。当我尝试打印 Currency.ExchangeCCY 时,它给了我一个错误。我怎样才能获得特定的值而不是整个嵌套对象?
val query = MongoDBObject("RunDate" -> "18-02-2015")
val fields = MongoDBObject("Currency.ExchangeCCY" -> 1,
"Currency.MarketCapCCY" -> 1)
for (d <- price.find(query,fields)) println(d("Currency"))
//> { "ExchangeCCY" : "CAD" , "MarketCapCCY" : "CAD"}
//| { "ExchangeCCY" : "CAD" , "MarketCapCCY" : "CAD"}
您可以使用 d.getAs[DBObject]
或 d.getAsOrElse[DBObject]
访问子文档。这个returns另一个DBObject
,可以从中查询具体的字段
对于您的情况,暂时忽略错误处理,
val currencyDocument = d.getAs[DBObject]("Currency").get
val exchangeCcy = currencyDocument("ExchangeCCY")
这种方法有几个问题。最明显的是exchangeCcy
的编译时类型。如果您查看 Casbah Scaladocs,您将看到它的类型为 AnyRef
。如果您认为这应该始终是一个字符串,您可以强制执行此操作:
val exchangeCcy = currencyDocument.getAs[String]("ExchangeCCY").get
exhangeCcy
现在保证是一个字符串。
错误处理呢?如果我们无法将 Currency
转换为 DBObject
或将 exhangeCcy
转换为字符串怎么办?线索在getAs
。这 returns 一个 Scala option 如果转换失败则为 Some(value)
或 None
。因此,读取 Currency
子文档的容错方式是:
val currencyDocument = d.getAs[DBObject]("Currency") match {
case Some(v) => v
case None => throw new IllegalStateException(
"Failed to read 'Currency'")
}
我是 Casbah 和 scala 的新手。我如何访问scala中的嵌套文档?我在这里定义了几个字段,如您所见,货币和比率是嵌套文档。当我尝试打印 Currency.ExchangeCCY 时,它给了我一个错误。我怎样才能获得特定的值而不是整个嵌套对象?
val query = MongoDBObject("RunDate" -> "18-02-2015")
val fields = MongoDBObject("Currency.ExchangeCCY" -> 1,
"Currency.MarketCapCCY" -> 1)
for (d <- price.find(query,fields)) println(d("Currency"))
//> { "ExchangeCCY" : "CAD" , "MarketCapCCY" : "CAD"}
//| { "ExchangeCCY" : "CAD" , "MarketCapCCY" : "CAD"}
您可以使用 d.getAs[DBObject]
或 d.getAsOrElse[DBObject]
访问子文档。这个returns另一个DBObject
,可以从中查询具体的字段
对于您的情况,暂时忽略错误处理,
val currencyDocument = d.getAs[DBObject]("Currency").get
val exchangeCcy = currencyDocument("ExchangeCCY")
这种方法有几个问题。最明显的是exchangeCcy
的编译时类型。如果您查看 Casbah Scaladocs,您将看到它的类型为 AnyRef
。如果您认为这应该始终是一个字符串,您可以强制执行此操作:
val exchangeCcy = currencyDocument.getAs[String]("ExchangeCCY").get
exhangeCcy
现在保证是一个字符串。
错误处理呢?如果我们无法将 Currency
转换为 DBObject
或将 exhangeCcy
转换为字符串怎么办?线索在getAs
。这 returns 一个 Scala option 如果转换失败则为 Some(value)
或 None
。因此,读取 Currency
子文档的容错方式是:
val currencyDocument = d.getAs[DBObject]("Currency") match {
case Some(v) => v
case None => throw new IllegalStateException(
"Failed to read 'Currency'")
}