2012-12-26 11 views
6

Si supponga che ho tali entità come la seguente:Come utilizzare i dati di primavera mongo @CompoundIndex con sottoinsiemi?

@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; 
    ... 
} 

è possibile utilizzare un compoundIndex rispetto al A.id E B.id insieme?

voglio dire forse come:

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

Grazie in anticipo.

+0

hai provato? Non funziona? –

+0

Non ho ancora provato, nel nostro ambiente è abbastanza difficile capire se gli indici sono creati e funzionano correttamente o meno. La responsabilità di Mongodb è di proprietà del nostro architetto e al giorno d'oggi non è disponibile. Ecco perché volevo chiedere prima da qui. – Javatar

risposta

9

Ho provato questo tipo di indice composto nella mia app, che utilizza anche dati primaverili e ha funzionato correttamente. Basta correggere la definizione dell'indice in @CompoundIndex annotazione:

@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; 
    ... 
} 

Se si esegue una query con spiegare (come il seguente) in guscio Mongo, vedrete che l'indice * * aid_bid_idx verrà utilizzato.

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

Il risultato sarà qualcosa di simile:

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

Thx per fornire l'esempio con "explain()". – Vincent

1

Ho avuto lo stesso problema, per me la soluzione del Miguel ha funzionato, ma ho dovuto avvolgere la @CompoundIndex all'interno di un @CompoundIndexes altrimenti didn' t lavoro (sto usando Spring Roo).

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

Penso che anche CompounIndex funzionerà direttamente. Una cosa che mancava nella documentazione è che non menzionano quando verranno creati gli indici dopo averli introdotti nel blocco di codice. Dopo averlo giocato per un po ', vedo che gli indici vengono creati solo dopo aver inserito un nuovo post del documento che li ha introdotti nel codice. –

Problemi correlati