[英]Scala case class not return data
我用的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方法不返回帶有始終為applications
相同的空列表的值的tcpPorts
?
這是一個簡單的命名問題。 您的模型對象指定了tcpPorts
和applications
(復數),但是您的Mongo文檔中有tcpPort
和application
(單數)。 修復一個或另一個,或者(不建議這樣做,因為這會使您的手寫查詢很@Key
,但它可以解決您的緊迫問題)在每個字段中使用@Key
將單數映射為復數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.