使用Mongoid,是否可以使用“update_all”将值推送到符合特定条件的所有条目的数组字段?
示例:
class Foo
field :username
field :bar, :type => Array
def update_all_bars
array_of_names = ['foo','bar','baz']
Foo.any_in(username: foo).each do |f|
f.push(:bar,'my_new_val')
end
end
end
我想知道是否有办法一次更新所有用户(将值'my_new_val'推送到每个匹配条目的“foo”字段)使用“update_all”(或类似的东西)而不是循环他们一次更新一个。我已经尝试了所有我能想到的东西,到目前为止还没有运气。
由于
答案 0 :(得分:5)
您需要从Mongo数据库驱动程序调用它。你可以这样做:
Foo.collection.update(
Foo.any_in(username:foo).selector,
{'$push' => {bar: 'my_new_val'}},
{:multi => true}
)
或者
Foo.collection.update(
{'$in' => {username: foo}},
{'$push' => {bar: 'my_new_val'}},
{:multi => true}
)
如果您想在Mongoid内置中执行此操作,可以执行pull_request或功能请求。