为什么我在mongo上的嵌入式文档重复?

时间:2015-09-13 10:01:45

标签: php mongodb symfony

每个人,

我是关于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"
    }
]
}

城市是重复的,请你告诉我什么是错的,为什么城市重复?

0 个答案:

没有答案