我有以下型号
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
but
person.tasks.create :name => "create facebook killer"
person.tasks.create :name => "create facebook killer"
仍然产生一个副本。
上面在 Person 中显示的索引配置将转换为 for mongodb
db.things.ensureIndex({firstname : 1, 'tasks.name' : 1}, {unique : true})