使用Casbah

时间:2017-03-27 05:54:21

标签: mongodb scala casbah

我有一个MongoDB文档,我需要使用Casbah for scala进行更新。我的mongoDB文档看起来像

{"_id": ObjectId("58d86364fbb1bb2224cab56a"),
"record_interval": 
       [
          {
          "record_time": ISODate("2017-01-26T09:22:15.000Z"),
          "insert_time": ISODate("2017-03-26T12:57:08.610Z"),
          "reading1": 50.0,
          "reading2": 627.0
          }
       ],
"record_id": "1234",
"record_hour": ISODate("2017-01-26T09:00:00.000Z")
}

我使用df.write方法插入了上面的文档,因此我在创建数据帧时能够使用数据类型指定模式,并且能够成功插入具有指定数据类型的文档。

现在,我需要在记录间隔数组中添加一个对象。我有一个JSON字符串,我将其解析为DBObject

val DBobject: DBObject = JSON.parse(Json_String).asInstanceOf[DBObject]

DBobject,如下所示

{
  "vib_temp": "55.0",
  "vib_voltage": "647.0",
  "message_time": "2017-01-26 03:48:52.000000",
  "etl_date_time": "2017-03-26 06:57:09.302000"
}

我使用下面的代码将此DBObject添加到上述文档的record_interval数组中。

collection.update(MongoDBObject("_id" -> new ObjectId("58d86364fbb1bb2224cab56a"))
     ,$push("record_interval" -> new MongoDBObject(DBobject)))

我能够更新所需的文档,但是元素record_time,insert_time,reading1和reading2的数据类型都是字符串。而我想插入具有适当数据类型的对象。如何在更新文档时指定数据类型?提前致谢

1 个答案:

答案 0 :(得分:0)

我发现我尝试插入的DBObject应该具有所需数据类型的值。

以下为我工作。

val Current_datetime = new DateTime()
val message_time = new DateTime()

collection.update(MongoDBObject("_id" -> new ObjectId("58d86364fbb1bb2224cab56a"))
     ,$push("record_interval" -> new MongoDBObject(
                   ,("vib_temp"->55.0)
                   ,("vib_voltage"->647.0)
                   ,("message_time"->message_time)
                   ,("etl_date_time"-> Current_datetime))))