我在Symfony2
中使用doctrine mongodb odm
捆绑包进行申请。我创建了一个id为strategy = NONE的文档,就像(只是一个片段):
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Id(strategy="NONE")
* @var string
*/
private $id;
稍后在插入时,每次在调用persist之前指定id时,在检查日志时我发现upsert已经完成而不是batchInsert。经过一些谷歌搜索,我遇到this link,向我证实,事实上,这是设计的情况。
因此我的问题是:在指定了对象的id之后,如何避免upsert发生?
Ps:我需要这个,因为使用upsert,doctrine mongodb odm
会更新,以防它找到已存在的ID,但我希望它看到重复并抛出MongoDuplicateKeyException
。
答案 0 :(得分:0)
正如您所注意到的,如果新文档的标识符在初始持久化期间设置(或标识符在prePersist
事件期间生成),ODM将会插入新文档,here您可以在UnitOfWork
中看到相关代码。对于要插入的文档,您需要将文档的ID策略更改为CUSTOM
并使用您自己的生成器,您可以在this docs chapter的末尾找到有关它的一些信息。