0

Casbah の MongoCollectionBase.find(...) から返された DBObject から、特定のキー (この場合は "orderItems") の値を抽出したいと考えています。私は解決策を持っていますが、それに満足していません。私のソリューションは面倒でした。DBObject.toMap から返された java.util.Map をキャストして、すべてのステップで Scala Map またはその他のコレクションに変換しました。これに対するより良い方法は何ですか?ありがとう

val orders = provisioningDb("systems").find(MongoDBObject.empty, MongoDBObject("company.department.orders" -> 1))

import scala.collection.JavaConversions._

def findC(m : Map[String, Any]) : Iterable[Any] = {
  val c = for ((k, v) <- m) yield (k, v) match {
    case (k, v) if k equals "orderItems" => v
    case (k, v : java.util.HashMap[String, Any]) => findC(toMap(v).asInstanceOf[Map[String, Any]]).head
    case _ => Nil
  }
  c.filter(_.isInstanceOf[java.util.List[Any]] )
}

def toMap[K, E](m: java.util.Map[K, E]): Map[K, E] = {
  Map.empty ++ new MapWrapper[K, E](m)
}

val orderItems = for {
  x <- orders
} yield x

for (y <- orderItems) {
  println(findC(toMap(y.toMap).asInstanceOf[Map[String, Any]]))
}

詳細が削除された 2 行のサンプル データは、MongoDB に保持されています。

company : {department : {orders -> [{"id" : "543", "quantity" : 2}, {"id" : "223", "quantity" : 21}, {"id" : "332", "quantity" : 3}] 


company : {department : {orders -> [{"id" : "222", "quantity" : 8}, {"id" : "663", "quantity" : 3] 
4

1 に答える 1

0

a をSalatcase classと一緒に使用することを検討しましたか?

また、この素晴らしいプレゼンテーション、特に ケース オブジェクトを直接永続化および取得できる SalatDAO について説明しているスライド28を確認することもできます。

于 2012-04-13T18:30:07.933 に答える