Casbah MongoDB обновляет только определенные поля

Я использую драйвер Casbah Scala для выполнения операций CRUD в базе данных MongoDB. Я хотел бы обновить определенные поля в конкретном документе. Я использую метод findAndModify, но, к моему удивлению, весь документ переписывается. В моем исходном документе есть 5 полей перед вызовом findAndModify, в котором я хочу обновить 1 его поле. После вызова findAndModify у меня осталось только 2 поля. Вот что я пытаюсь!

val mongoClient = MongoClient()
val db = mongoClient(MongoDBSetup.TEMP_DATABASE)
val query = MongoDBObject("uid" -> userExam.uid)
val update = MongoDBObject("answers" -> userExam.userAnswers)
db(MongoDBSetup.MONGO_DB_COLLECTION_USER_EXAM).findAndModify(query, update)

Есть ли что-то еще, что я должен учитывать, чтобы в документе изменялось только поле ответов?


person joesan    schedule 29.12.2013    source источник


Ответы (1)


Вам нужно сделать это с документом обновления $set, чтобы изменить только подмножество полей. Это должно делать то, что вы хотите:

val update = MongoDBObject(
  "$set" -> MongoDBObject("answers" -> userExam.userAnswers)
)

Подробнее о $set в mongodb: http://docs.mongodb.org/manual/reference/operator/update/set/

person johanandren    schedule 29.12.2013
comment
Спасибо за подсказку. Я не нашел фактического синтаксиса его использования. Я знал, что могу использовать оператор set, но не знал, как его использовать. Спасибо еще раз! - person joesan; 30.12.2013