当指定id为mongodb odm时,防止upsert

时间:2016-05-11 14:35:47

标签: mongodb symfony doctrine odm

我在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

1 个答案:

答案 0 :(得分:0)

正如您所注意到的,如果新文档的标识符在初始持久化期间设置(或标识符在prePersist事件期间生成),ODM将会插入新文档,here您可以在UnitOfWork中看到相关代码。对于要插入的文档,您需要将文档的ID策略更改为CUSTOM并使用您自己的生成器,您可以在this docs chapter的末尾找到有关它的一些信息。