Assume that I have such entities like the following:
@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;
...
}
is it possible to use a compoundIndex with respect to A.id AND B.id together?
I mean maybe like:
@CompoundIndex(name = "aid_bid_idx", def = "{'id', 'b.id'}")
Thanks in advance.
I've tried this kind of compound index in my app, that use spring data too, and worked properly.
You only have to correct the index definition in @CompoundIndex
annotation:
@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;
...
}
If you run a query with explain (like the follows) in mongo shell, you'll see that the index *aid_bid_idx* will be used.
db.doc_a.find({ "id" : 1, "b.id" : 1}).explain()
The result will be something like this:
{
"cursor" : "BtreeCursor aid_bid_idx",
...
}
I had the same problem, for me the Miguel's solution worked but I had to wrap the @CompoundIndex inside a @CompoundIndexes otherwise it didn't work (I'm using Spring Roo).
@CompoundIndexes({
@CompoundIndex(name = "aid_bid_idx", def = "{'id' : 1, 'b.id' : 1}")
})
@Document(collection = "doc_a")
public class A {...}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With