Как обновить / удалить встроенный объект
Учитывая следующую модель домена:
case class Benefits(id: Int, benefitPlan: String, comment : String)
case class Employee(empNum : Int, benefits : List[Benefit])
Я использовал Salat, чтобы помочь дериализовать / десериализовать эти объекты. Тем не менее, я немного запутался в том, как удалить / обновить конкретный объект из Списка преимуществ в объекте сотрудника, учитывая, что мне известен файл profit.id объекта, который должен быть удален / обновлен?
Я не хочу повторять полный список преимуществ, чтобы иметь возможность обновлять один объект, так как этот список может содержать большое количество объектов во время выполнения. Есть ли лучший способ, чем получить объект emp, повторять список до тех пор, пока не будет найден нужный объект, обновить его и затем сохранить объект emp обратно?
2 ответа
В этом случае я бы сказал ваш benefits
должен быть Map[Int, Benefits]
,
Если вы используете Map
, ваше обновление / удаление будет O(1) вместо линейного времени.
List
не очень хороший выбор, если вам нужен произвольный доступ и обновление элемента в нем.
Я бы посоветовал заглянуть в эту статью о 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
}