Doctrine orm 未创建索引

Doctrine orm 未创建索引,doctrine-orm,doctrine-odm,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\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();
还有什么我没有做的吗?

在正常ODM使用期间,不会创建索引(如果索引与映射同步,也不会确保索引)

若您使用的是Symfony,那个么解决问题就很容易了,只需从Symfony的控制台运行
doctrine:mongodb:schema:create
命令(若您使用的是其他框架,请查找等效命令,因为命令本身是由ODM提供的)

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

在正常ODM使用期间,不会创建索引(如果索引与映射同步,也不会确保索引)

若您使用的是Symfony,那个么解决问题就很容易了,只需从Symfony的控制台运行
doctrine:mongodb:schema:create
命令(若您使用的是其他框架,请查找等效命令,因为命令本身是由ODM提供的)

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

然后,如果使用symfony run
php bin/console原则:mongodb:schema:create

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

//AppBundle/Document

    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
    }
//应用程序包/控制器

   $dm = $this->get('doctrine_mongodb')->getManager();
   $dm->getSchemaManager()->ensureIndexes();
运行应用程序时,将自动创建架构和数据库。 有关详细信息

//AppBundle/Document

    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
    }
//应用程序包/控制器

   $dm = $this->get('doctrine_mongodb')->getManager();
   $dm->getSchemaManager()->ensureIndexes();
运行应用程序时,将自动创建架构和数据库。
更多信息

我尝试了odm:schema:create,但仍然得到了所有没有索引的集合。否。我得到:
为所有类创建dbs为所有类创建集合为所有类创建索引
没有特定的documentsTry列表使用
--class
运行命令并指定classIt确实是正确的答案!此外:条令:mongodb:schema:create创建并更新mongodb模式,条令:mongodb:schema:update可以用来更新它。我尝试了odm:schema:create,但我仍然得到了所有没有索引的集合。否。我得到:
为所有类创建dbs为所有类创建集合为所有类创建索引
没有特定的documentsTry列表使用
--class
运行命令并指定classIt确实是正确的答案!此外,还可以使用条令:mongodb:schema:create创建并更新mongodb模式和条令:mongodb:schema:update对其进行更新。