He siguiendo el modeloCómo hacer cumplir documento incrustado único en MongoId
class Person
include Mongoid::Document
embeds_many :tasks
end
class Task
include Mongoid::Document
embedded_in :commit, :inverse_of => :tasks
field :name
end
¿Cómo puedo asegurar lo siguiente?
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
es decir, nombres de las tareas son únicos dentro de una persona en particular
Habiendo leído los documentos en los índices pensé que el siguiente podría funcionar:
class Person
include Mongoid::Document
embeds_many :tasks
index [
["tasks.name", Mongo::ASCENDING],
["_id", Mongo::ASCENDING]
], :unique => true
end
pero
person.tasks.create :name => "create facebook killer"
person.tasks.create :name => "create facebook killer"
todavía prod hace un duplicado.
El índice de configuración se muestra arriba en persona se traduciría en mongodb para
db.things.ensureIndex({firstname : 1, 'tasks.name' : 1}, {unique : true})
He añadido detalles a la cuestión de cuál sería la configuración de índice en persona traducido en mongodb. No incluye dropDups: verdadero, así que echaré un vistazo a eso. – opsb
Parece que dropDups solo se usa cuando se crea un nuevo índice por primera vez, por lo que no va a resolver mi problema. – opsb