9

次のようなエンティティがあるとします。

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

A.id AND B.id に関して CompoundIndex を一緒に使用することは可能ですか?

つまり、次のようになります。

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

前もって感謝します。

4

2 に答える 2

19

アプリでこの種の複合インデックスを試してみましたが、これは春のデータも使用しており、適切に機能しました。@CompoundIndex注釈のインデックス定義を修正するだけです。

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

mongo シェルで Explain (次のような) を使用してクエリを実行すると、インデックス *aid_bid_idx* が使用されることがわかります。

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

結果は次のようになります。

{
    "cursor" : "BtreeCursor aid_bid_idx",
    ...
}
于 2012-12-27T11:33:46.753 に答える
3

私は同じ問題を抱えていました.Miguelのソリューションは機能しましたが、 @CompoundIndex 内に @CompoundIndex をラップする必要がありました.それ以外の場合は機能しませんでした.

@CompoundIndexes({
    @CompoundIndex(name = "aid_bid_idx", def = "{'id' : 1, 'b.id' : 1}")
})
@Document(collection = "doc_a")
public class A {...}
于 2014-09-28T16:16:20.337 に答える