2010-11-19 8 views
7

Ursprünglich auf der Grails-Mailingliste ...Grails MongoDB Plugin: Embedded Kollektionen vs Referenzen

ich nicht im Allgemeinen eine Datenbank Typ bin aber mit der Veröffentlichung der neuesten mongodb Plugin für Grails, wollte ich etwas sehen Das große Problem ist mit NoSQL-Datenbanken. MongoDB scheint ziemlich interessant zu sein. Ich habe die Informationen über Document orientierte Speicherung zu lesen und dann auf das folgende Szenario:

Kunde/Auftrag/Auftragsposition

Der Doc sagt Aufträge sollte eine Sammlung sein. Kunden eine Sammlung. Zeilenelemente sollten ein Array von in das Befehlsobjekt eingebetteten Zeilenelementen sein.

In Bezug auf GORM, wie wird dieses Muster sichergestellt? Ich würde typischerweise folgendes haben:

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

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

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

Wie stelle ich sicher, dass Bestellungen eine eigene Sammlung ist und nicht in den Kunden eingebettet? Wenn das die Standardeinstellung ist, wie stelle ich sicher, dass OrderItems in Order eingebettet sind und nicht in der eigenen Kollektion? Was ist der Standardwert hier?

Danke.

Antwort

10

Aus dem Lesen der Grails-MongoDB-Plugin-Dokumentation scheint es, als müssten Sie eingebettete Objekte explizit deklarieren, wobei die Verweise die Standardeinstellung sind.

Mit dem im Verstand, wenn Sie sicherstellen möchten, dass Aufträge seine eigene Sammlung zu sein, und Orderitems eingebettet werden, versuchen Sie dies:

class Customer { 
    List<Order> orders 
} 

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

class OrderItems { 
    // properties go here. 
} 

Here's the documentation.

+0

Hallo, ist diese Antwort hilfreich, aber es beantwortet nicht wirklich die Frage - es gibt nur eine Richtung, um die Antwort zu finden. Insbesondere bin ich immer noch nicht klar darüber, ob Dinge wie "hasMany" in einem mongodb-Kontext verwendet werden würden (ich vermute nicht), und wenn nicht, wie genau sollte dies in der Domänenklasse so bezeichnet werden, dass die Sammlungen sind richtig in mongodb gespeichert. Ich denke, wenn Greggs Frage ("Wie sorge ich dafür, dass Orders ... in Orden eingebettet und nicht seine eigene Sammlung? Was ist der Standard hier?") Explizit beantwortet wird, wäre das ein gutes Beispiel, von dem man lernen könnte. – mindthief

+1

@mindthief: Die Antwort wurde aktualisiert, um die Frage etwas deutlicher zu beantworten. Außerdem glaube ich, dass "hasMany" eher ein relationales Datenbankkonzept ist, weshalb MongoDB es nicht verwendet. – Pat

+0

... Danke Pat !! – mindthief