Ich mache eine Anwendung in Symfony2
und mit dem doctrine mongodb odm
Bundle. Ich habe ein Dokument mit einer ID, die Strategie = NONE, wie (nur ein Schnipsel) hat:Ein Upsert verhindern, wenn id angegeben ist mongodb odm
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Id(strategy="NONE")
* @var string
*/
private $id;
Später beim Einfügen, jedes Mal wenn ich die ID angeben vor dem Aufruf anhalten, auf die Protokolle Überprüfung finde ich, dass ein Upsert wurde anstelle von BatchInsert durchgeführt. Nach einigem Googeln bin ich auf this link gestoßen, was mir bestätigte, dass dies tatsächlich der Fall ist.
Meine Frage ist daher: Wie kann vermieden werden, dass das Upsert passiert, nachdem ich die ID des Objekts angegeben habe?
Ps: Ich brauche das, weil mit dem upsert doctrine mongodb odm
wird aktualisiert, falls es die ID bereits dort findet, aber ich will es wie ein Duplikat zu sehen und werfen Sie eine MongoDuplicateKeyException
.
Danke für Ihre Antwort; fühlt sich definitiv wie die Richtung an, die ich nehmen sollte. Mein einziges Problem ist jetzt, dass ich anscheinend nicht herausfinden kann, wie ich (in meinem ID Generator, der das 'Doctrine \ ODM \ MongoDB \ Id \ AbstractIdGenerator' erweitert) den' $ param' in 'setId ($ param) "Ruf an, innerhalb meiner späteren ID. – anka
Ich bin mir nicht sicher, was "$ param" Sie meinen? Im Allgemeinen muss Ihr Generator die ID zurückgeben, ODM wird sie später zu dem fraglichen Dokument setzen. – malarzm
Nochmals vielen Dank [malarzm] (http://stackoverflow.com/users/5982920/malarzm) für die Hilfe. Mit '$ param 'bezeichne ich den Wert, den ich als ID des $ -Objekts setzen möchte, bevor ich ihn an persistieren lasse, wie' persist ($ object) '. Der setId-Aufruf würde wie '$ object-> setId ($ param)' sein, irgendwo nach der Instanziierung von $ object, aber vor 'persist ($ object)'. Gibt es eine Möglichkeit, auf diesen Wert (von $ param) innerhalb des Generators zuzugreifen? – anka