2012-12-26 29 views
6

Giả sử rằng tôi có các đơn vị này như sau:Làm thế nào để sử dụng dữ liệu mùa xuân mongo @CompoundIndex với các bộ sưu tập phụ?

@Document(collection = "doc_a") 
public class A {  
    @Field("id") 
    private Integer id; 

    @Field("b") 
    private Collection<B> b; 
    ... 
} 


public class B {  
    @Field("id") 
    private Integer id; 
    ... 
} 

là nó có thể sử dụng một compoundIndex đối với A.id VÀ B.id cùng ấy?

Ý tôi là có lẽ như:

@CompoundIndex(name = "aid_bid_idx", def = "{'id', 'b.id'}") 

Cảm ơn trước.

+0

bạn đã thử chưa? Nó không hoạt động? –

+0

Tôi chưa thử, trong môi trường của chúng tôi, thật khó để hiểu được liệu các chỉ mục được tạo và hoạt động thành công hay không. Trách nhiệm của Mongodb thuộc sở hữu của kiến ​​trúc sư của chúng tôi, và ngày nay ông không có sẵn. Đó là lý do tại sao tôi muốn hỏi đầu tiên từ đây. – Javatar

Trả lời

9

Tôi đã thử loại chỉ mục hợp chất này trong ứng dụng của mình, sử dụng dữ liệu mùa xuân và hoạt động bình thường. Bạn chỉ phải sửa định nghĩa chỉ mục trong @CompoundIndex chú thích:

@CompoundIndex(name = "aid_bid_idx", def = "{'id' : 1, 'b.id' : 1}") 
@Document(collection = "doc_a") 
public class A {  
    @Field("id") 
    private Integer id; 

    @Field("b") 
    private Collection<B> b; 
    ... 
} 

public class B {  
    @Field("id") 
    private Integer id; 
    ... 
} 

Nếu bạn chạy một truy vấn với giải thích (như sau) trong vỏ Mongo, bạn sẽ thấy rằng chỉ số * aid_bid_idx * sẽ được sử dụng.

db.doc_a.find({ "id" : 1, "b.id" : 1}).explain() 

Kết quả sẽ là một cái gì đó như thế này:

{ 
    "cursor" : "BtreeCursor aid_bid_idx", 
    ... 
} 
+0

Thx để cung cấp ví dụ với "explain()". – Vincent

1

tôi đã cùng một vấn đề, đối với tôi giải pháp của Miguel làm việc nhưng tôi đã phải quấn @CompoundIndex bên trong một @CompoundIndexes nếu không nó didn' t làm việc (Tôi đang sử dụng Spring Roo).

@CompoundIndexes({ 
    @CompoundIndex(name = "aid_bid_idx", def = "{'id' : 1, 'b.id' : 1}") 
}) 
@Document(collection = "doc_a") 
public class A {...} 
+0

Tôi nghĩ rằng CompounIndex trực tiếp cũng sẽ hoạt động. Một điều đã bị thiếu trong tài liệu là họ không đề cập đến khi các chỉ mục sẽ được tạo ra bài giới thiệu chúng trong khối mã. Sau khi chơi xung quanh nó một lúc, tôi thấy rằng các chỉ mục được tạo ra chỉ sau khi chèn một bài viết tài liệu mới giới thiệu chúng trong mã. –

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