如果指定多个字段 - 值对,则$ set将更新或创建 每个领域。
我有一个像这样的mongoid文件:
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}
)
答案 0 :(得分:0)
只是不要使用$ set。只传递field: value
对,所有字段都被替换(除了_id字段)
这应该可以正常工作。
MyCounter.where(
date: date
).find_and_modify(
hash, {'upsert' => 'true', new: true}
)
http://docs.mongodb.org/manual/reference/method/db.collection.update/#example-update-replace-fields