我在使用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
find 方法没有返回tcpPorts
值,它总是空列表相同applications
?