2016-05-17 52 views
1

访问值执行MongoDB的查询我的结果后的类型为:res = Seq[Document]从MongoDB的使用Scala

要访问BsonString我用:res (0).get("n"))

将返回:

Some(BsonString{value='value'}) 

我怎样才能从BsonString作为字符串访问值value

访问值Some(BsonString{value='value'})返回BsonString{value='value'}是否需要使用库(例如Jackson)将BsonString{value='value'}转换为Scala对象,然后访问值?

回答

1

我想你使用的是mongo scala驱动程序(而不是ReactiveMongo)。

在这种情况下,返回的BsonString是一个java对象; here是指向javadoc的scaladoc。

您可以通过getValue方法访问该值。

当你回到Option对象时,我建议使用适当的理解来避免运行时异常;是这样的:

val optionalResult = for { 
    doc <- res.headOption 
    element <- doc.get[BsonString]("n") 
} yield (element.getValue) 

optionalResultOption[String]型。 然后你可以检查你是否有价值并使用它;通过地图,flatMap,foreach甚至if (optionalResult.isDefined)

+0

谢谢,你让我在正确的轨道,我需要修改你的理解到:VAL optionalResult = {为DOC < - res.headOption 元素< - doc.get( “N”) }收益(元.asString.getValue) –

+0

我编辑了答案,明确要求一个'BsonString'。 'asString'方法在java类中定义,如果它不是'BsonString',则会引发异常。如果值不是'BsonString',则最好使用scala中定义的机制'Document'类,它将返回'None' –