给出以下域模型:
case class Benefits(id: Int, benefitPlan: String, comment : String)
case class Employee(empNum : Int, benefits : List[Benefit])
我一直在使用Salat来帮助推导/反序列化这些对象。但是,鉴于我知道要删除/更新的对象的benefit.id,我对如何从员工对象中的好处List中删除/更新特定对象有点困惑?
我不想迭代完整的好处列表以便能够更新单个对象,因为此列表可能在运行时包含大量对象。有没有比获取emp对象更好的方法,迭代列表直到找到所需的对象,更新它然后再保存emp对象?
答案 0 :(得分:2)
在这种情况下,我会说benefits
应该是Map[Int, Benefits]
。
如果您使用Map
,您的更新/删除将是O(1)而不是线性时间。
List
不是一个好的选择。
答案 1 :(得分:0)
我建议调查这个关于Casbah和Salat的article(假设你正在使用salat for MongoDB)
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
}