2017-02-17 11 views
0
{'_id': ObjectId('589df735be9fa2077dc5bb2e'), 
'name': 'train.2', 
'samples': [{'processed': {'eulerAngles': [1.946705159018607, 
              -0.01405100477972897, 
              0.02015610032297892]}, 
       'raw': {'accel': [0.01548936311155558, 
           0.0002011665492318571, 
           0.02126962691545486], 
         'gyro': [0.06626824289560318, 
           0.1328225582838058, 
           0.001385239884257317]}, 
       'timestamp': '2017-02-10T17:24:04.283Z'}, 
      {'processed': {'eulerAngles': [1.948553665755181, 
              -0.01403613777322358, 
              0.01932380767991558]}, 
       'raw': {'accel': [0.01380419824272394, 
           -0.001462434651330113, 
           0.01273023523390293], 
         'gyro': [0.09209229052066803, 
           0.07342914491891861, 
           0.01548820454627275]}, 
       'timestamp': '2017-02-10T17:24:04.293Z'}}]} 

サンプル配列内のすべてのサンプルについて、配列accelを抽出する必要があります。私は次のコードを書いたCasbahで深くネストされたMongoDBオブジェクトをクエリする[Scala]

val el = db("samples").findOne(MongoDBObject("name" -> name)) 
    var t_series_seq: Array[Array[Double]] = Array() 
    for (m <- el.get("samples")) t_series_seq :+ m("raw")("accel") 

これは返すvalue foreach is not a member of AnyRefです。 el.get( "samples")型に伝える必要がありますが、複雑なMapオブジェクトであることを伝える方法はわかりません。

答えて

0

申し訳ありませんが、Casbahのドキュメントは本当に悪いです。私は実際にデータ科学のためのScalaのScalaでMongoDBを使うことに専念する章を読んでこれを得ました。

私のコードは次のようになります。

val dbSamples = db("samples").find(MongoDBObject("name" -> name)) 
var timesSeries: Array[TimeSeries] = Array() 
for (s <- dbSamples) { 
    var tSeries_seq: Array[Array[Double]] = Array() 
    val measures = s.getAs[List[DBObject]]("samples").get 
    for (m <- measures) { 
    println(m.getAs[DBObject]("raw").get.getAs[List[Double]]("accel").get.toArray) 
    tSeries_seq = tSeries_seq :+ m.getAs[DBObject]("raw").get.getAs[List[Double]]("accel").get.toArray 
    } 
    timesSeries = timesSeries :+ new TimeSeries(tSeries_seq, s.getAs[Integer]("valid").get) 
} 
timesSeries 
関連する問題