2010-11-19 10 views
7

Originalmente publicado en la lista de correo Griales ...Grails Plugin MongoDB: Colecciones Embedded vs Referencias

No soy generalmente un tipo de base de datos pero con el lanzamiento de la última versión del plugin para mongodb griales, quería ver qué la gran cosa es con bases de datos sin SQL. MongoDB parece bastante interesante. Estaba leyendo la información sobre el almacenamiento de documentos orientados y me encontré con el siguiente escenario:

Cliente// orden de partidas individuales

El médico dice que las órdenes deben ser una colección. clientes una colección. los artículos de línea deben ser una matriz de elementos de línea incrustados en el objeto del orden.

Con respecto a GORM, ¿cómo se garantiza este patrón? Normalmente tendría lo siguiente:

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

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

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

¿Cómo me aseguro de que Orders sea propia y no esté integrada en Customer? Si ese es el valor predeterminado, ¿cómo me aseguro de que los artículos de pedido estén incrustados en el pedido y no en su propia colección? ¿Cuál es el valor predeterminado aquí?

Gracias.

Respuesta

10

Al leer la documentación del complemento MongoDB de Grails, parece que necesita declarar específicamente objetos incrustados, con referencias por defecto.

Con esto en mente, si usted quiere asegurarse de que las órdenes sean de su propia colección, y artículos de pedido para ser integrado, intente esto:

class Customer { 
    List<Order> orders 
} 

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

class OrderItems { 
    // properties go here. 
} 

Here's the documentation.

+0

Hola, esta respuesta es útil, pero realmente no responde a la pregunta, solo proporciona una dirección para encontrar la respuesta. Específicamente, todavía no tengo claro si cosas como "hasMany" se usarían en un contexto mongodb (supongo que no), y si no, ¿cómo exactamente esto debería denotarse en la clase de dominio de modo que las colecciones sean almacenado correctamente en mongodb. Creo que si la pregunta de Gregg ("¿Cómo me aseguro de que Orders ... incrustado en Order y no en su propia colección? ¿Cuál es el valor predeterminado aquí?") Se responda explícitamente, eso sería un buen ejemplo del que aprender. – mindthief

+1

@mindthief: Actualicé la respuesta para ser un poco más explícito al responder la pregunta. Además, creo que "hasMany" es más un tipo de concepto de base de datos relacional, por lo que MongoDB no lo usa. – Pat

+0

... Gracias Pat !! – mindthief

Cuestiones relacionadas