每个人,
我是关于mongoDB的新手,我正在使用symfony2和mongoDB进行项目,
我有一份文件“国家”(支付)和“城市”(Ville)。城市嵌入国家文件。 但是,我注意到当我在国家/地区创建嵌入式文档“城市”时,城市是重复的,这是我的代码。 它符合吗?
Pays.php
<?php
// src/Rsi/UserBundle/Document/Pays.php
namespace Rsi\UserBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document(repositoryClass="Rsi\UserBundle\Repository\PaysRepository")
*/
class Pays
{
/**
* @MongoDB\Id(strategy="auto")
*/
protected $id;
/**
* @MongoDB\String
*/
private $nom;
/**
* @MongoDB\EmbedMany(targetDocument="Ville")
*/
private $villes = array();
public function __construct()
{
$this->villes = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return id $id
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
* @return self
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string $nom
*/
public function getNom()
{
return $this->nom;
}
/**
* Add ville
*
* @param Rsi\UserBundle\Document\Ville $ville
*/
public function addVille(\Rsi\UserBundle\Document\Ville $ville)
{
$this->villes[] = $ville;
}
/**
* Remove ville
*
* @param Rsi\UserBundle\Document\Ville $ville
*/
public function removeVille(\Rsi\UserBundle\Document\Ville $ville)
{
$this->villes->removeElement($ville);
}
/**
* Get villes
*
* @return \Doctrine\Common\Collections\Collection $villes
*/
public function getVilles()
{
return $this->villes;
}
}
Ville.php
<?php
namespace Rsi\UserBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document(repositoryClass="Rsi\UserBundle\Repository\VilleRepository")
*/
class Ville
{
/**
* @MongoDB\Id(strategy="auto")
*/
protected $id;
/**
* @MongoDB\String
*/
private $nom;
/**
* Get id
*
* @return id $id
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
* @return self
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string $nom
*/
public function getNom()
{
return $this->nom;
}
}
我的控制器是:
PaysController.Php
public function newAction()
{
$dm = $this->get('doctrine_mongodb')->getManager();
$pays = '';
$pays = $dm->getRepository("RsiUserBundle:Pays")->findByCode("fr");
if(!$pays){
$pays = new Pays();
$pays->setNom("France");
$pays->setCode("fr");
}else {
$pays = $pays[0];
}
$ville = new Ville();
$ville->setNom("Lille");
$pays->addVille($ville);
$dm->persist($pays);
$dm->flush();
return new Response(var_dump('ok'));
}
当我第一次执行Controller的操作时,我得到了这个:
{
"_id": ObjectID("55f548582bd671260b8b456a"),
"nom": "France",
"code": "fr",
"villes": [
{
"_id": ObjectID("55f548582bd671260b8b456b"),
"nom": "Lille"
}
]
}
但是,当我重新执行该行动,并想要将一个新城市添加到已经存在的国家时,我得到了这个:
{
"_id": ObjectID("55f548582bd671260b8b456a"),
"nom": "France",
"code": "fr",
"villes": [
{
"_id": ObjectID("55f548582bd671260b8b456b"),
"nom": "Lille"
},
{
"nom": "Paris"
},
{
"_id": ObjectID("55f548e52bd671270b8b456a"),
"nom": "Paris"
},
{
"nom": "Nice"
},
{
"_id": ObjectID("55f549152bd67162098b4569"),
"nom": "Nice"
}
]
}
城市是重复的,请你告诉我什么是错的,为什么城市重复?