首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mongodb文档到Scala case类

Mongodb文档到Scala case类
EN

Stack Overflow用户
提问于 2018-05-09 07:24:48
回答 2查看 1.5K关注 0票数 3

我使用的是MongoDB scala驱动程序。我在从MongoDB获取记录时遇到问题。以下是我的MongoDB初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private val client: MongoClient = MongoClient()
private val database: MongoDatabase = client.getDatabase(“rulemgntdb”)
val WorkOrdercollection: MongoCollection[Document] = database.getCollection("workOrder")

查找查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MongoFactory.WorkOrdercollection.find().collect().subscribe(
     (results: Seq[Document]) =>
           println(s”Found: #${results})

   ) 

打印结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Found: #List(Document((_id,BsonString{value=‘5af153f49547a205f9798129’}), (workOrderId,BsonString{value=‘9a9e1ce8-c576-4a15-a1ff-4af780b14b7f’}), (thingId,BsonString{value=‘Mumbai_Robot_3’}), (alertId,BsonString{value=‘Alert_1’}), (description,BsonString{value=‘Robot is not in good condition’}), (lastViewedDate,BsonDateTime{value=1525781377952}), (suggestedMaintenanceDate,BsonDateTime{value=1525781377952}), (startDate,BsonDateTime{value=1525781377952})))

我想将这个文档映射到我的Case类。

Case类如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case class WorkOrder (
           var  id  : String = (new ObjectId()).toString(),
           var  workOrderId: String,
           var  thingId  : String,
           var  alertId : String,
           var  description  : String,
            val lastViewedDate : Date,
            val suggestedMaintenanceDate : Date,
            val startDate : Date
    )

如果我执行以下操作从文档中获取JSON字符串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MongoFactory.WorkOrdercollection.find(query).subscribe(
  (user: Document) => println(user.toJson()),                         // onNext
  (error: Throwable) => println(s"Query failed: ${error.getMessage}"), // onError
  () => println("Done")                                               // onComplete
)

然后,我将获得以下JSON字符串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ “_id” : “5af153f49547a205f9798129", “workOrderId” : “9a9e1ce8-c576-4a15-a1ff-4af780b14b7f”, “thingId” : “Mumbai_Robot_3", “alertId” : “Alert_1", “description” : “Robot is not in good condition”,  “lastViewedDate” : { “$date” : 1525781377952 }, “suggestedMaintenanceDate” : { “$date” : 1525781377952 }, “startDate” : { “$date” : 1525781377952 } }

我可以在“startDate” : { “$date” : 1525781377952 }中将JSON字符串解析为case类but...Look,但无法将MongoDB日期解析为scala日期。

如何将文档映射到Case类?

EN

回答 2

Stack Overflow用户

发布于 2018-05-09 08:25:08

您需要为$date字段提供自定义编解码器。下面展示了它是如何在play-json中实现的,但在其他JSON库中也有类似的概念:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object WorkOrder {
  implicit val dateRead: Reads[Date] =
    (__ \ "$date").read[Long].map(date => new Date(date))

  implicit val dateWrite: Writes[Date] = new Writes[Date] {
    def writes(date: Date): JsValue = Json.obj("$date" -> date.getTime)
  }

  implicit val codec = Json.format[WorkOrder]
}
票数 1
EN

Stack Overflow用户

发布于 2018-05-09 08:53:18

您可以使用JSON库。

play-json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case class WorkOrder (
  id: String,
  workOrderId: String,
  thingId: String,
  alertId: String,
  description: String,
  lastViewedDate: Date,
  suggestedMaintenanceDate: Date,
  startDate: Date
)

object WorkOrder {
  implicit lazy val fmt = Json.format[WorkOrder]
}

def documentToWorkOrder(doc: Document): WorkOrder = {
  Json.parse(user.toJson().toString).validate[WorkOrder] match {
    case JsSuccess(_, workOrderObj) => workOrderObj
    case JsError(throwable)  => throw throwable
  }
}

//then in your code
MongoFactory.WorkOrdercollection.find(query).subscribe(
 (user: Document) => documentToWorkOrder(user),
 (error: Throwable) => println(s"Query failed: ${error.getMessage}"),
 () => println("Done")
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50247718

复制
相关文章
Scala中的case match语法
scala中的case语法与java中的switch语法类似,但比switch更强大: 例子一正则匹配: val Pattern="(s.*)".r val v1="spark"; val r=v1 match { case Pattern(v1)=> "begin s*" case "1"=> "1" case "2"=> "2" case _=> "default" } println(r) // beg
我是攻城师
2018/05/14
2.5K0
scala 枚举类
第2行:通过type定义枚举类型的别名 第3行:我们的枚举从1开始,后续枚举值一次加1
大数据工程师-公子
2019/03/14
6250
mongoDB 文档删除
mongoDB文档删除等同于关系型数据库中删除满足条件的单条或者多条记录,通常使用db.collection.remove()方法来实现文档的删除动作。mongDB文档删除属于原子性操作,仅仅在仅仅在单个文档级别。本文描述mongoDB文档删除操作并给出示例。 预备热身 Linux下快速安装MongoDB Windows平台下安装MongoDB mongoDB 启动与停止 mongo shell连接到mongoDB及shell提示符下执行js脚本 mongoDB简介及关键特性
Leshami
2018/08/13
1.6K0
mongoDB 文档插入
db.collection.insertOne(obj, ) 插入单个文档到一个集合(3.2版本有效),可选参数为w, wtimeout db.collection.insertMany( [objects], ) 插入多个文档到一个集合(3.2版本有效),可选参数为w, wtimeout db.collection.insert(obj) 传统的插入方式
Leshami
2018/08/13
9820
mongoDB 文档更新
1、mongoDB文档更新有很多个不同的方法,传统的update,以及3.2版本之后的updateOne,updateMany 2、mongoDB文档替换也有很多个不通的方法,传统的update,以及3.2版本之后的replaceOnye,replaceMany 3、updateOne与updateMany是对update方法的扩展,update方法可以通过multi值为true或false来等同于updateMany以及updateOne 4、replaceOne与replaceMany也是对update方法的扩展,update方法可以通过multi值为true或false来等同于replaceMany以及replaceOne
Leshami
2018/08/13
1.7K0
mongoDB 文档查询
1、文档查询db.users.find()等价于db.users.find( {} ) 2、基于and运算符的多个组合条件可以省略and运算符的多个组合条件可以省略and,直接将条件组合即可 3、对于$and运算符内的条件,用[]括起来,相当于数组形式 4、对于数组查询,可以使用基于下标的方式精确配置特定的元素值 5、对于内嵌文档,可以使用”文档键.内嵌文档键”方式进行访问 6、对于数组内内嵌文档的方式,可以使用”数组名.下标.内嵌文档键”方式访问 7、对于哪些列名需要显示可以通过{ field1: <0|1>, … }来设定 8、本文参考:https://docs.mongodb.com/manual/tutorial/query-documents/
Leshami
2018/08/13
3.2K0
MongoDB查找文档
3、查找文档 // 根据条件查找文档(条件为空则查找所有文档) Course.find().then(result => console.log(result)) // 返回文档集合 [{ _id: 5c0917ed37ec9b03c07cf95f, name: 'node.js基础', author: 'wuyuxin‘ },{ _id: 5c09dea28acfb814980ff827, name: 'Javascript', author: 'wuyuxin‘ }]
Qwe7
2022/05/23
2.6K0
MongoDB 插入文档
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
用户4988376
2021/08/13
1.2K0
MongoDB(四)—-MongoDB的文档操作
在MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。 MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
全栈程序员站长
2021/04/07
1.5K0
Scala学习笔记(四) 类的初步Scala 类相关总结
终于来到面向对象的地方了,虽说函数式编程是 Scala 的特性,让人们觉得 Scala 是更好的 Java。但是在架构层面上一直提倡着:小处用函数式编程,大处用面向对象编程。
fengzhizi715
2018/08/24
4670
MongoDB文档查询操作
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
别团等shy哥发育
2023/02/25
1.1K0
MongoDB文档查询操作
MongoDB文档更新操作
我们在前面的文章中提到过文档的基本的增删改查操作,MongoDB中提供的增删改查的语法非常丰富,本文我们主要来看看更新都有哪些好玩的语法。 本文是MongoDB系列的第四篇文章,了解前面的文章有助于更好的理解本文: ---- 文档替换 假设我的集合中现在存了如下一段数据: { "_id" : ObjectId("59f005402844ff254a1b68f6"), "name" : "三国演义", "authorName" : "罗贯中", "authorGender" :
江南一点雨
2018/04/02
1.4K0
MongoDB文档更新操作
MongoDB的文档(二)
MongoDB中查询文档非常方便,可以使用集合对象的find()方法。例如,要查询名为mycollection的集合中所有文档,可以使用以下命令:
堕落飞鸟
2023/05/09
7320
MongoDB的文档(一)
MongoDB是一种非关系型数据库,使用BSON(Binary JSON)格式存储数据。MongoDB的文档是MongoDB中的核心数据结构,类似于关系数据库中的行。
堕落飞鸟
2023/05/09
6420
Play For Scala 开发指南 - 第10章 MongoDB 开发
在 Reactive 越来越流行的今天,传统阻塞式的数据库驱动已经无法满足Reactive应用的需要了,为此我们将目光转向新诞生的数据库新星 MongoDB 。MongoDB 从诞生以来就争议不断,总结一下主要有以下几点:
joymufeng
2019/03/12
1.5K0
scala类与伴生类、单例
类似python元类与apply方法类似python中call方法 class Person(name: String, var age: Int){ println("Person") //private[this] var age = 18 // 字段必须得初始化 var gender:String=_ def Age=age //这个是方法 def increamen(){age+=1} def this(name:String, age:Int, gender:String
用户1733462
2018/06/01
5500
(3) - Scala case class那些你不知道的知识
除了在模式匹配中使用之外,unapply 方法可以让你结构 case class 来提取它的字段,如:
codingforfun
2018/08/24
4070
MongoDB文档查询操作(一)
上篇文章我们主要介绍了MongoDB的修改操作,本文我们来看看查询操作。 本文是MongoDB系列的第五篇文章,了解前面的文章有助于更好的理解本文: ---- find方法再探 find方法是很重要的一个查询方法,我们在前面也已经使用过多次了,一般情况下我们调用的是: find() 没有传入任何参数,这个等价于: find({}) 都表示没有查询条件,查询所有的数据。如果有查询条件,我们传入查询条件即可,查询条件也是一个文档,如下表示查询x为1的文档: db.sang_collect.find({x:1})
江南一点雨
2018/04/02
8770
MongoDB(5)- Document 文档相关
Documents MongoDB 的文档可以理解为关系型数据库(Mysql)的一行记录 MongoDB 将数据记录为 BSON 格式的文档 BSON 是 JSON 文档的二进制表示,但它支持的数据类
小菠萝测试笔记
2021/06/01
1.4K0
MongoDB(5)- Document 文档相关
Scala Http请求工具类
import java.io.IOException import java.util import org.apache.http.client.ClientProtocolException import org.apache.http.client.entity.UrlEncodedFormEntity import org.apache.http.client.methods.{HttpGet, HttpPost} import org.apache.http.impl.client.{DefaultHttpClient, HttpClients} import org.apache.http.message.BasicNameValuePair import org.apache.http.util.EntityUtils import org.slf4j.LoggerFactory import scala.collection.JavaConversions._ import scala.reflect.macros.ParseException
大数据流动
2020/06/19
1.7K0

相似问题

json到scala case类

111

Scala case类到Spring POJO

10

Scala case类()

12

MongoDB Scala驱动程序。如何仅从case类对象更新已更改的文档字段

18

Flink scala Case类

214
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文