我有以下型号
class Person
include Mongoid::Document
embeds_many :tasks
end
class Task
include Mongoid::Document
embedded_in :commit, :inverse_of => :tasks
field :name
end
如何确保以下几点?
person.tasks.create :name => "create facebook killer"
person.tasks.create :name => "create facebook killer"
person.tasks.count == 1
different_person.tasks.create :name => "create facebook killer"
person.tasks.count == 1
different_person.tasks.count == 1
即任务名称在特定人员中是唯一的
在检查完索引文档后,我认为以下方法可能会起作用:
class Person
include Mongoid::Document
embeds_many :tasks
index [
["tasks.name", Mongo::ASCENDING],
["_id", Mongo::ASCENDING]
], :unique => true
end
但
person.tasks.create :name => "create facebook killer"
person.tasks.create :name => "create facebook killer"
仍然会产生重复。
以上在Person中显示的索引配置将转换为mongodb
db.things.ensureIndex({firstname : 1, 'tasks.name' : 1}, {unique : true})
最佳答案
默认情况下,索引不是唯一的。如果您在此查看Mongo Docs,则唯一性是一个额外的标志。
我不知道确切的Mongoid翻译,但是您正在寻找这样的东西:db.things.ensureIndex({firstname : 1}, {unique : true, dropDups : true})
关于ruby-on-rails - 如何在Mongoid中强制执行唯一的嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338757/