10

spring-data-mongodb-1.2.0.RELEASE を使用しています。A と B の 2 つのクラスがあり、B には A への参照があり、@DBRef で注釈が付けられています。

クラスA:

@Document(collection = "a")
public class A {
@Id
public String id;

/** The TicketGrantingTicket this is associated with. */
@Field
public String name;

public A(String id, String name) {
    this.id = id;
    this.name = name;
}
}

クラス B:

@Document(collection = "b")
public class B {

@Id
public String id;

@Field
public String name;

@DBRef
@Indexed
public A a;

public B(String id, String name, A a) {
    super();
    this.id = id;
    this.name = name;
    this.a = a;
}
}

特定の A を参照している B のすべてのインスタンスを照会しているので:

B fromDB = mongoOperations.findOne(Query.query(Criteria.where("a.$id").is(a1.id)), B.class);

インデックスする必要があります。

B インスタンスを MongoDB に最初に挿入した後、インデックスを作成する必要があります。以下に示すように、そうではありません。

このようなインデックスを作成する方法を知っている人はいますか?

さらに、DBRef フィールド (mongo シェルで確認できる) が、 MongoDB のドキュメントで定義されている形式と一致していないように見えます。

ここで何か不足していますか?

4

4 に答える 4

9

mongo シェルを使用してインデックスを作成できますが、コードを使用して作成したい場合、および spring-data-mongodb を使用しているため、これを使用します。

mongoTemplate.indexOps(B.class).ensureIndex(new Index().on("a", Order.ASCENDING));

クラスの名前が一致しない場合は、コレクションの名前を指定することもできます。

mongoTemplate.indexOps("b").ensureIndex(new Index().on("a", Order.ASCENDING));
于 2013-04-04T20:22:16.167 に答える
1
DBObject indexOptions = new BasicDBObject();
indexOptions.put("a", 1);
indexOptions.put("b", 1);
indexOptions.put("c.d", 1);
indexOptions.put("e.f", 1);
CompoundIndexDefinition indexDefinition =
            new CompoundIndexDefinition(indexOptions);
mongoTemplate.indexOps(.class).ensureIndex(indexDefinition);

for unique index you can add mongoTemplate.indexOps(.class).ensureIndex(indexDefinition).unique();
于 2016-06-02T09:28:37.817 に答える