Scala 案例 class 不是 return 数据

Scala case class not return data

我在使用 salat 库的项目中使用了 mongoDB 和 scala,我的模型包含:

case class ApplicationGroupModel(
  @Key("_id") id: ObjectId,
  devicesData: List[ApplicationDevicesData]
  )
case class ApplicationDevicesData(
  hostId: Option[String],
  tcpPorts: List[Int] = List.empty,
  applications: List[String] = List.empty)
object ApplicationGroupModel extends ModelCompanion[ApplicationGroupModel, ObjectId] {

  val collection = ScalaMongoFactory.database(collectionName)
  val dao = new SalatDAO[ApplicationGroupModel, ObjectId](collection = collection) {}
  def apply(rawData: JsValue): ApplicationGroupModel = {
    val devicesDataList = getTcpData(rawData)
    ApplicationGroupModel(new ObjectId,devicesDataList)
  }

 private def getTcpData(rawData: JsValue): List[ApplicationDevicesData] = {
        //function body
        //return List of ApplicationDevicesData

  }

在控制器中我将模型称为:

val allData = ApplicationGroupModel.findOneById(new ObjectId("556c23b244aef072afcb6d50")).toList

如果我打印 allData 它显示以下输出:

ApplicationGroupModel(556c23b244aef072afcb6d50,List(ApplicationDevicesData(Some(127.0.0.1),List(),List()), ApplicationDevicesData(Some(127.0.0.1),List(),List()), ApplicationDevicesData(Some(localhost),List(),List()))))

但是如果我这样调用 model :

val allData = ApplicationGroupModel.collection.findOneByID(new ObjectId("556c23b244aef072afcb6d50")).toList

并打印 allData 然后输出为:

List({ "_id" : { "$oid" : "556c23b244aef072afcb6d50"} ,  "devicesData" : [ { "hostId" : "127.0.0.1" , "tcpPort" : [ 80 , 22 , 443] ,   "application" : [ "ABC"]} , { "hostId" : "127.0.0.1" , "tcpPort" : [ 22] ,   "application" : [ "XYZ"]} , { "hostId" : "localhost" , "tcpPort" : [ 5000 , 4100 , 22 , 80] ,   "application" : [ "ABCD"]}]})

我不知道为什么我的 model 找到的方法不是 return tcpPorts,它的值总是空列表,与 applications 相同?

这是一个简单的命名问题。您的模型对象指定 tcpPortsapplications(复数),但您的 Mongo 文档具有 tcpPortapplication(单数)。修复一个或另一个,或者(不推荐,因为它会让您的手写查询很痛苦,但它可以解决您的直接问题)对每个字段使用 @Key 将单数映射到复数。