给定以下领域模型:
case class Benefits(id: Int, benefitPlan: String, comment : String)
case class Employee(empNum : Int, benefits : List[Benefit])
我一直在使用Salat来帮助派生/反序列化这些对象。然而,我有点困惑,如何删除/更新员工对象的福利列表中的特定对象,因为我知道的好处。需要删除/更新的对象Id ?
我不想迭代完整的利益列表,以便能够更新单个对象,因为该列表可能在运行时包含大量对象。是否有比获得emp对象更好的方法,迭代列表,直到找到所需的对象,更新它,然后保存emp对象?
在这种情况下,我会说您的benefits
应该是Map[Int, Benefits]
。
如果你使用Map
,你的更新/删除将是O(1)而不是线性时间。
List
不是一个好的选择。
我建议你看看这篇关于Casbah和Salat的文章(假设你在MongoDB中使用Salat)
def removeBenefit(empNum : Int, benefitId: Int)= {
val updateQuery = $pull("benefits " -> MongoDBObject("id" -> benefitId))
val query = MongoDBObject("empNum " -> empNum )
modify(query, updateQuery) // your findAndModify operation goes here
}