索引未创建

时间:2016-12-15 20:11:17

标签: doctrine-orm doctrine-odm

我有一个定义了索引的文档。

/** @ODM\Document */
class Stat
{
    /** @ODM\Id(strategy="NONE", type="int") */
    private $id;

    /** @ODM\Field(type="string") */
    private $period;

    /** @ODM\ReferenceOne(targetDocument="Player") */
    private $player;

    /** @ODM\Field(type="string") @ODM\Index */
    private $statType;

但是,当我查看集合中创建的索引时,唯一的索引是_id。

要保存我正在执行的文件:

$stat = new Documents\Stat();

$stat->setId(1);
$stat->setPlayer($player);
$stat->setPeriod(1);
$stat->setStatType('goal');

$dm->persist($stat);
$dm->flush();

还有其他我不做的事吗?

3 个答案:

答案 0 :(得分:3)

在正常的ODM使用过程中,不会创建索引(如果它们与映射同步,也不会确保索引)。

如果您正在使用Symfony,那么解决问题很容易,只需从Symfony的控制台运行doctrine:mongodb:schema:create命令(如果您正在使用其他框架,请查找等效的命令本身由ODM提供)。

如果要控制代码中的索引,可以使用SchemaManager提供API来直接控制“模式”(您还可以基于每个文档控制索引)。获得它很容易:$sm = $dm->getSchemaManager();

答案 1 :(得分:1)

// AppBundle /文档

    namespace AppBundle\Document;

    use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
    use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique as MongoDBUnique;

    /**
    * @MongoDB\Document(repositoryClass="AppBundle\Repository\ProduitRepository")
    * @MongoDBUnique(fields="$noProduit")
    */
    class Produit
    {
      /**
       * @MongoDB\Id
       */
       protected $id;

      /**
       * @MongoDB\String
       * @MongoDB\UniqueIndex(order="asc")
       */
       protected $noProduit;

       /**
        * @MongoDB\Field(type="string")
        */
       protected $libelle;

      // getter and setter
    }

// AppBundle / Controller

   $dm = $this->get('doctrine_mongodb')->getManager();
   $dm->getSchemaManager()->ensureIndexes();

模式和数据库将在您运行应用程序时自动创建。 有关更多信息, visit this link

答案 2 :(得分:0)

/**
 * @ODM\Document
 * @ODM\Indexes({
 *   @ODM\Index(keys={"statType"="asc"}),
 *   @ODM\UniqueIndex(keys={"period"="asc"})//For example unique index
 * })
 */
class Stat
{
}

然后,如果您使用symfony运行php bin/console doctrine:mongodb:schema:create