2012-10-17 3 views

Répondre

13

Si vous devez stocker des valeurs non mappées à une classe de document dans un tableau, vous pouvez utiliser le mappage de zone collection, qui correspond à un tableau de base dans MongoDB. Il existe également un type hash, qui convertit de la même manière un tableau associatif en PHP en un objet dans MongoDB sans mapper quoi que ce soit en son sein. Si "Type" dans votre exemple est une classe de document mappé, vous devez utiliser une relation EmbedMany, qui stockera un ou plusieurs documents mappés dans un tableau dans le document parent. Dans MongoDB, ceci sera représenté comme un tableau d'objets, ce qui est similaire à ce que vous pourriez faire avec le champ collection (stocker un tableau de tableaux associatifs); cependant, ODM utilisera le mappage EmbedMany pour réhydrater ces objets dans les instances de document.

+0

a fonctionné pour moi merci. Pas clair pourquoi ce n'est pas spécifié dans les docs http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/basic-mapping.html#doctrine-mapping-types –

+0

Quel genre de cartographie devrions-nous utiliser pour mettre à jour le tableau pour ajouter une autre clé: élément de valeur? – Sekai

+0

@Sekai: Je ne comprends pas la question. Le type 'collection' exécute la valeur PHP à l'aide de' array_values ​​() 'avant de l'écrire dans le champ MongoDB (pour réindexer numériquement les clés). La stratégie 'hash' convertit la valeur PHP en un objet (c'est-à-dire stdClass en PHP) pour s'assurer qu'il est sauvegardé en tant qu'objet BSON. Aucune des paires clé/valeur dans les valeurs de collection/de hachage n'est mappée (c'est ce qui les distingue des documents incorporés (EmbedOne et EmbedMany) – jmikola

4
... 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 
... 
class MyClass 
{ 
    /** 
    * @MongoDB\Hash 
    */ 
    protected $tags = array(); 
} 

De plus, vous pouvez consulter BSPTagBundle si vous voulez un type de formulaire qui vous aide à ce type de variable.

5

Vous pouvez utiliser les types de hachage mongo ou la collection selon vos besoins.

Hash: Stocke et récupère la valeur sous forme de tableau associatif.

Collection: Enregistre et récupère la valeur sous la forme d'un tableau indexé numérique.

Par exemple:

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

class Category 
{ 
    /** 
    * @MongoDB\Field(name="tags", type="collection") 
    */ 
    private $tags; 

    /** 
    * @MongoDB\Field(name="country_wise_total_count", type="hash") 
    */ 
    private $country_wise_total_count; 
} 

Les données sont stockées telles que:

"tags": [ 
    "man", 
    "boy", 
    "male", 
    "sandal", 
    "cloth", 
    "army boots", 
    "boots", 
    "sport shoes", 
    "school", 
    "casual", 
    "office" 
    ], 

"country_wise_total_count": { 
    "NP": NumberInt(7), 
    "US" : NumberInt(10) 
    } 
Questions connexes