2010-11-19 33 views
7

Được đăng trên danh sách gửi thư của Grails ...Grails MongoDB Plugin: Bộ sưu tập được nhúng vs Tài liệu tham khảo

Tôi thường không phải là một chàng trai cơ sở dữ liệu nhưng với việc phát hành plugin mongodb mới nhất cho grails, tôi muốn xem thỏa thuận lớn là với cơ sở dữ liệu noSQL. MongoDB có vẻ khá thú vị. Tôi đã đọc các thông tin về lưu trữ theo định hướng tài liệu và đã xem qua kịch bản sau đây:

khách hàng/Order/Order mục dòng

Các doc nói đơn đặt hàng nên có một bộ sưu tập. khách hàng một bộ sưu tập. các chi tiết đơn hàng phải là một mảng các chi tiết đơn hàng được nhúng trong đối tượng order.

Đối với GORM, mẫu này được đảm bảo như thế nào? Tôi thường có các thông tin sau:

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

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

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

Làm cách nào để đảm bảo rằng Đơn đặt hàng là bộ sưu tập của riêng nó chứ không được nhúng trong Khách hàng? Nếu đó là mặc định, làm thế nào để tôi chắc chắn rằng OrderItems được nhúng trong Order và không phải là bộ sưu tập của riêng nó? Mặc định ở đây là gì?

Cảm ơn.

Trả lời

10

Từ đọc tài liệu về Plugin MongoDB của Grails, có vẻ như bạn cần khai báo cụ thể các đối tượng nhúng, với tham chiếu là mặc định.

Với ý nghĩ đó, nếu bạn muốn chắc chắn rằng đơn đặt hàng để được bộ sưu tập của riêng mình, và OrderItems được nhúng, hãy thử này:

class Customer { 
    List<Order> orders 
} 

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

class OrderItems { 
    // properties go here. 
} 

Here's the documentation.

+0

Hi, câu trả lời này là hữu ích, nhưng nó không thực sự trả lời câu hỏi - nó chỉ cung cấp hướng đi tìm câu trả lời. Cụ thể, tôi vẫn chưa rõ liệu những thứ như "hasMany" có được sử dụng trong ngữ cảnh mongodb hay không, và nếu không, thì chính xác như thế nào nên được biểu thị trong lớp miền sao cho các bộ sưu tập được lưu trữ chính xác trong mongodb. Tôi nghĩ rằng nếu câu hỏi của Gregg ("Làm thế nào để đảm bảo rằng Đơn đặt hàng ... được nhúng vào Thứ tự chứ không phải là bộ sưu tập của riêng nó? Cái gì là mặc định ở đây?") Được trả lời một cách rõ ràng, đó sẽ là một ví dụ tốt để học hỏi. – mindthief

+1

@mindthief: Cập nhật câu trả lời để rõ ràng hơn một chút khi trả lời câu hỏi. Ngoài ra, tôi tin rằng "hasMany" là một loại khái niệm cơ sở dữ liệu quan hệ hơn, đó là lý do tại sao MongoDB không sử dụng nó. – Pat

+0

... Cảm ơn Pat !! – mindthief

Các vấn đề liên quan