2010-11-19 15 views
7

Originariamente pubblicato su mailing list Grails ...Grails MongoDB Plugin: Collezioni embedded vs Riferimenti

Io non sono in genere un tipo di database, ma con l'uscita del l'ultimo plugin MongoDB per graal, ho voluto vedere cosa il grosso problema è con i database noSQL. MongoDB sembra piuttosto interessante. Stavo leggendo le informazioni sul documento orientato stoccaggio e sono imbattuto nel seguente scenario:

cliente/Ordinare Ordinare Line/Articolo

Il dottore dice che gli ordini dovrebbero essere una raccolta. i clienti una collezione. gli elementi pubblicitari dovrebbero essere una serie di elementi di linea incorporati nell'oggettoorder.

Per quanto riguarda GORM, come viene garantito questo schema? Io tipicamente ho il seguente:

class Customer { 
    static hasMany = [orders: Order] 
} 

class Order { 
    static hasMany = [orderItems: OrderItem] 
    static belongsTo = [customer:Customer] 
} 

class OrderItem { 
    static belongsTo = [order:Order] 
} 

Come mi assicuro che gli ordini siano la propria raccolta e non incorporati nel cliente? Se questo è l'impostazione predefinita, come posso assicurarmi che OrderItem sia incorporato nell'ordine e non nella propria collezione? Qual è l'impostazione predefinita qui?

Grazie.

risposta

10

Dalla lettura della documentazione del plugin Grails MongoDB, sembra che sia necessario dichiarare in modo specifico gli oggetti incorporati, con i riferimenti come predefiniti.

Con questo in mente, se si vuole fare in modo che gli ordini da una propria collezione, e OrderItems per essere incorporato, provate questo:

class Customer { 
    List<Order> orders 
} 

class Order { 
    List<OrderItem> orderItems 
    static embedded = [ 'orderItems' ] 
} 

class OrderItems { 
    // properties go here. 
} 

Here's the documentation.

+0

Ciao, questa risposta è utile, ma in realtà non risponde alla domanda - fornisce solo indicazioni su come trovare la risposta. In particolare, non sono ancora chiaro se cose come "hasMany" verrebbero usate in un contesto mongodb (sto indovinando non), e se no, allora come esattamente questo dovrebbe essere indicato nella classe di dominio in modo tale che le collezioni siano correttamente memorizzato in mongodb. Penso che se la domanda di Gregg ("Come faccio a garantire che gli ordini ... incorporati nell'ordine e non la propria collezione? Qual è l'impostazione predefinita qui?") Viene risposto esplicitamente, che servirebbe da buon esempio per imparare da. – mindthief

+1

@mindthief: aggiorna la risposta per essere un po 'più esplicito nel rispondere alla domanda. Inoltre, credo che "hasMany" sia più un tipo di concetto di database relazionale, motivo per cui MongoDB non lo usa. – Pat

+0

... Grazie Pat !! – mindthief