Если вы укажете несколько пар поле-значение, $set обновит или создаст каждое поле.
У меня есть такой монгоидный документ:
class MyCounter
include Mongoid::Document
field :date, type: Date
field :properties, type: Hash
end
и когда я пытаюсь изменить свойства следующим образом:
hash = {properties.0 => 50, properties.1 => 100 }
MyCounter.where(something).find_and_modify(
{ '$set' => hash, {'upsert' => 'true', new: true}
)
он сохраняет старые ключи в хэше свойства.
Как правильно полностью заменить (и создать новый документ, если он не существует) хэш в документе?
ИЗМЕНИТЬ
Я сейчас делаю это, что глупо:
MyCounter.where(
date: date
).find_and_modify(
{ '$unset' => { properties: nil} }, {'upsert' => 'true', new: true}
)
MyCounter.where(
date: date
).find_and_modify(
{ '$set' => hash }, {'upsert' => 'true', new: true}
)