ruby-on-rails - Mongoid - 阵列管理?插入唯一值,如果存在则删除值?

标签 ruby-on-rails arrays mongoid mongodb

我正在尝试做一些我认为相当简单的事情:

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/

相关文章:

c - 将数组传递给函数时出现段错误

php - 从 PHP 获取数组值到 javascript

ruby - 选择没有间隔的年龄计数

ruby-on-rails - 多个elasticsearch过滤器

ruby-on-rails - Rails - 将样式/图像添加到 button_to

java - 将值数组 POST 到 java servlet

mongodb - 将现有的 MongoDB 字符串属性转换为 BSON::ObjectId

ruby-on-rails - ruby /rails : alias_method practices

mysql - MYSQL Database Rails 3.2 未保持唯一性

ruby - Mongoid : The Validation "validates_uniqueness_of" is only triggered when the specific field changes