Come rappresentereste un oggetto che può essere di più tipi, quando lo memorizzate come documento in MongoDB?

4

In qualche modo correlato a questa domanda , diciamo che ho una categoria di oggetti che, a seconda del tipo di oggetto che ho, ha diverse restrizioni su ciò che contiene. (se riesci a riformulare la frase precedente per avere più senso lo apprezzerei)

Ad esempio

var SomeSchema = new Schema({
  _id: ObjectID,
  [... large number of common fields ...]
  type: //Restricted somehow to members of a fixed array
  data: //depending on type, this might be restricted - sometimes an integer, sometimes array, etc...
});

Qual è il metodo idiosincratico per definire questo tipo di schema? È appropriato definire un singolo schema e gestire i tipi all'interno dei suoi membri, oppure sto meglio con uno schema separato per ogni tipo?

    
posta blueberryfields 08.03.2012 - 22:19
fonte

3 risposte

1

Penso che sia difficile farlo in mongodb, mongodb è più una memorizzazione "stupida" di oggetti e non ha alcuna interpretazione di ciò che sta memorizzando. (Ovviamente sono necessarie alcune cose intelligenti per l'indicizzazione, ecc. Ma non sul livello del modello di dominio)

Devi salvare un campo di tipo nell'oggetto e scrivere codice che legge l'oggetto da mongo e fa alcune cose speciali in base al valore del tipo. Quindi il modello di dominio dovrebbe gestire tutte le restrizioni speciali necessarie e genera un'eccezione quando qualcosa non va.

    
risposta data 30.05.2012 - 11:24
fonte
1

Credo che il problema generale che stai cercando di risolvere sia chiamato "ereditarietà a tavolo singolo" o STI. Dal momento che Mongo non è un database relazionale, situazioni come questa vengono solitamente risolte nel codice del modello, come suggerito da I.renkerna.

Di solito imposti una colonna che manterrà il "tipo" del modello e quindi gestirà i diversi tipi in modo appropriato nel resto dell'applicazione.

Tuttavia, ci sono alcune linee guida che possono essere seguite per Mongo:

link (diapositive 25 e 26)

Al di fuori di Mongo, puoi ottenere una migliore comprensione del concetto da un esempio nel framework Yii:

link

Buona fortuna!

    
risposta data 04.06.2012 - 17:48
fonte
0

Intendi come memorizzare una gerarchia di classi in MongoDb? Questa domanda mostra come farlo usando la libreria C #. Direi mapparlo semplicemente e lasciare che il modello di dominio gestisca le restrizioni e simili. Proprio come se lo stessimo facendo con un DB relazionale.

    
risposta data 08.03.2012 - 23:00
fonte

Leggi altre domande sui tag