2012-10-17 7 views

risposta

13

Se è necessario memorizzare valori non associati a una classe di documento in una matrice, è possibile utilizzare la mappatura dei campi collection, che esegue il mapping su una matrice di base in MongoDB. Esiste anche un tipo hash, che converte analogamente un array associativo in PHP in un oggetto in MongoDB senza mappare nulla al suo interno.

Se "Tipo" nell'esempio è una classe di documento mappato, quindi si vorrà utilizzare una relazione EmbedMany, che memorizzerà uno o più documenti mappati in una matrice all'interno del documento principale. All'interno di MongoDB, questo sarà rappresentato come una matrice di oggetti, che è simile a quello che potresti fare tu stesso con il campo collection (memorizzando una matrice di array associativi); tuttavia, ODM utilizzerà la mappatura EmbedMany per idratare tali oggetti nelle istanze del documento.

+0

ha lavorato per me, grazie. Non è chiaro il motivo per cui non è specificato nei documenti http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/basic-mapping.html#doctrine-mapping-types –

+0

Che tipo di mappatura dovremmo usare per aggiornare la matrice per aggiungere un'altra chiave: elemento valore? – Sekai

+0

@Sekai: Non capisco la domanda. Il tipo 'collection' esegue il valore PHP tramite' array_values ​​() 'prima di scriverlo nel campo MongoDB (per reindicizzare le chiavi numericamente). La strategia 'hash' lancia il valore PHP su un oggetto (ad esempio stdClass in PHP) per garantire che sia salvato come oggetto BSON. Nessuna delle coppie chiave/valore all'interno dei valori di raccolta/hash viene mappata (questo è ciò che le distingue dai documenti incorporati (EmbedOne e EmbedMany). – jmikola

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

Inoltre, è possibile controllare BSPTagBundle se si desidera un tipo di modulo che ti aiuta con quel tipo di variabile.

5

È possibile utilizzare l'hash o la raccolta di tipi mongo in base alle proprie esigenze.

Hash: Memorizza e recupera il valore come array associativo.

Collezione: Memorizza e recupera il valore come matrice indicizzata numerica.

Ad esempio:

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; 
} 

I dati vengono memorizzati come ad esempio:

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

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