Ich habe das folgende ModellWie einzigartig eingebettetes Dokument in mongoid
class Person
include Mongoid::Document
embeds_many :tasks
end
class Task
include Mongoid::Document
embedded_in :commit, :inverse_of => :tasks
field :name
end
Wie kann ich folgend sicherstellen erzwingen?
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
dh Aufgabennamen sind eindeutig innerhalb einer bestimmten Person
Nachdem die Dokumentation auf Indizes ausgecheckt dachte ich folgendes funktionieren könnte:
class Person
include Mongoid::Document
embeds_many :tasks
index [
["tasks.name", Mongo::ASCENDING],
["_id", Mongo::ASCENDING]
], :unique => true
end
aber
person.tasks.create :name => "create facebook killer"
person.tasks.create :name => "create facebook killer"
noch Prod benötigt ein Duplikat.
Der Index Config oben in Person gezeigt würde übersetzen in für mongodb
db.things.ensureIndex({firstname : 1, 'tasks.name' : 1}, {unique : true})
Ich habe auf die Frage hinzugefügt Details, was der Index config in Person sein würde, übersetzt in in mongodb. Es enthält nicht die DropDups: Das stimmt, also schaue ich mir das an. – opsb
Es scheint, dass dropDups nur verwendet wird, wenn ich zuerst einen neuen Index erstelle, damit es mein Problem nicht löst. – opsb