Как обновить / удалить встроенный объект - PullRequest
0 голосов
/ 04 декабря 2011

Учитывая следующую модель домена:

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

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

Я использовал Salat, чтобы помочь дериализовать / десериализовать эти объекты.Тем не менее, я немного запутался в том, как удалить / обновить конкретный объект из Списка преимуществ в объекте сотрудника, учитывая, что мне известен файл profit.id объекта, который необходимо удалить / обновить?

Я не хочу повторять полный список преимуществ, чтобы иметь возможность обновлять один объект, поскольку этот список может содержать большое количество объектов во время выполнения.Есть ли лучший способ, чем получить объект emp, повторять список до тех пор, пока не будет найден нужный объект, обновить его и затем сохранить объект emp обратно?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

В этом случае я бы сказал, что ваш benefits должен быть Map[Int, Benefits].

Если вы используете Map, ваше обновление / удаление будет O (1) вместо линейного времени.

List не очень хороший выбор, если вам нужен произвольный доступ и обновление элемента в нем.

0 голосов
/ 11 января 2014

Я бы посоветовал заглянуть в эту статью о Casbah и Salat (при условии, что вы используете salat для 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...