具有mongodb odm学说的唯一索引

问题描述 投票:0回答:2

我正在为我的网站建立一个注册系统,并希望防止使用同一电子邮件地址进行重复注册。

用户类的声明如下所示:

/**
 * @Document
 */
class User extends BaseEntity
{
    private 
    /**
     * @Id
     */
    $id,

    /**
     * @String @Index(unique=true)
     */    
    $email
;
}

但是每当我使用相同的电子邮件保存用户时,都不会引发异常,并且我会收到重复的邮件。

我发现我需要做 $documentManager->flush(array('safe'=>true)); 的地方但这没有帮助。

我怎样才能实现我所需要的?谢谢

mongodb doctrine doctrine-odm
2个回答
5
投票

我也有类似的问题。该索引不是由 Doctrine 创建的,您可以通过在 mongo 控制台中键入以下内容来看到:

db.system.indexes.find()

我必须按照这些说明直接在 mongo 中创建索引。 之后将不会创建重复项。

然而 Symfony2/Doctrine 似乎没有抛出任何异常,插入只是默默地失败了。如果您直接在控制台中执行此操作,Mongodb 确实会提醒您插入失败。

--编辑:根据原始帖子,当

array('safe'=>true) 用作冲洗()的参数时,会抛出异常 is


0
投票
我是 MongoDB 新手,在我的项目中配置 mongo db 学说时遇到了类似的问题。

我使用PHPStorm的DB工具来检查是否创建了索引。正如您在图片中看到的,没有显示

UserDevice

 集合的索引

但是我跑步时可以看到索引

db.getCollection("UserDevice").getIndexes()

© www.soinside.com 2019 - 2024. All rights reserved.