【问题标题】:Query Deep Nested MongoDB Object with Casbah [Scala]使用 Casbah [Scala] 查询深度嵌套的 MongoDB 对象
【发布时间】:2017-02-17 15:02:24
【问题描述】:
{'_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'}}]}

对于样本数组中的每个样本,我需要提取数组加速度。我写了以下代码

    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 对象。

【问题讨论】:

    标签: mongodb scala casbah


    【解决方案1】:

    好的,所以 Casbah 的文档真的很糟糕。实际上,我是通过阅读 Scala for Data Science 中专门介绍将 MongoDB 与 Scala 结合使用的章节获得的。

    我的代码如下:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      相关资源
      最近更新 更多