我有一个定义了索引的文档。
/** @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();
还有其他我不做的事吗?
答案 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