我正在尝试做一些我认为相当简单的事情:
1) 仅当该值不存在时才在数组字段中插入该值
2) 删除数组中存在的值
我只是不知道如何做这些事情......目前我只是插入我的值而不检查它是否已经存在:myArray << obj.id
谢谢,
亚历克斯
ps:使用 Rails 3.0.3、mongo 1.1.5 和 mongoid 2.0.0.rc5
ps2:这是实现我想要的 mongodb 语法,但我不知道如何在 mongoid 中做到这一点
{ $addToSet : { field : value } }
仅当它不在数组中时才向数组添加值,如果 field 是现有数组,否则如果 field 不存在,则将 field 设置为数组值。如果字段存在但不是数组,则会引发错误条件。
添加许多值st.update
{ $addToSet : { a : { $each : [ 3 , 5 , 6 ] } } }
$pop
{ $pop : { field : 1 } }
删除数组中的最后一个元素(在 1.1 中添加)
{ $pop : { field : -1 } }
删除数组中的第一个元素(在 1.1 中添加)|
最佳答案
您想使用 add_to_set
方法,如下文所述(有些):http://mongoid.org/en/mongoid/docs/persistence.html#atomic
例子:
model = Model.new
model.add_to_set(:field, value)
model.save
你可以给它一个单一的值,甚至是一个值的数组。后者在将数组的每个元素添加到您指定的字段时,将使用 mongo 的 $each
限定符和 $addToSet
。
关于ruby-on-rails - Mongoid - 阵列管理?插入唯一值,如果存在则删除值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710423/