如何更新/删除嵌入对象

时间:2011-12-04 08:15:47

标签: scala mongodb casbah salat

给出以下域模型:

case class Benefits(id: Int, benefitPlan: String, comment : String)

case class Employee(empNum : Int, benefits : List[Benefit])

我一直在使用Salat来帮助推导/反序列化这些对象。但是,鉴于我知道要删除/更新的对象的benefit.id,我对如何从员工对象中的好处List中删除/更新特定对象有点困惑?

我不想迭代完整的好处列表以便能够更新单个对象,因为此列表可能在运行时包含大量对象。有没有比获取emp对象更好的方法,迭代列表直到找到所需的对象,更新它然后再保存emp对象?

2 个答案:

答案 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
}