我想從給定的mongodb檔案中獲取groups屬性為Seq[Int]。如何做到這一點?方法getList捕獲了一個運行時例外,我想了解并修復它。
n: Document((_id,BsonObjectId{value=613645d689898b7d4ac2b1b2}) 。(groups,BsonArray{values=[BsonInt32{value=2}, BsonInt32{value=3}]})
我試著用這種方式來編譯,但是我得到了運行時的錯誤"Caused by: java.lang.ClassCastException: 串列元素不能被轉換為scala.Int$"
val groups = n.getList("group"/span>, Int.getClass)
一些sbt庫的依賴性:
scalaVersion := "2.12.14"
libraryDependencies = "org.mongodb.scala" % "mongo-scala-river" % "4.3.1"
設定代碼:
val collection = db.getCollection("mylist"/span>)
Await.result(collection.drop.toFuture, Duration.Inf)
val groupsIn = Seq[Int](2, 3)
val doc = Document("group" -> groupsIn)
Await.result(collection.insertOne(doc).toFuture, Duration.Inf)
println("參見mongosh以驗證一個Seq[Int]已經被添加")
val result = Await.result(collection.find.toFuture, Duration.Inf)
for(n <- result) {
println("n: "/span> n)
val groups = n.getList("group", Int.getClass)
println("group: " groups)
}
評論。result是Seq[Document]型別的,n是Document型別的。
VSCODE中getList的懸停描述:
def getList[T](key: 任意一個, clazz: Class[T]) : java.util.List[T]
獲取給定key的串列值,將串列元素轉換為給定的Class。這是有用的到避免在客戶端代碼中進行投遞,盡管效果是相同的。
uj5u.com熱心網友回復:
在sarveshseri和Gael J的幫助下,解決方案達成:
import collection.JavaConverters._
val groups = n.getList("groups", classOf[Integer]).asScala.toSeq.map(p => p.toInt)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309130.html
標籤:
上一篇:Flink廣播狀態
下一篇:RN:回掃到不同的螢屏
