春天的数据 - MongoDB的索引DBREF(Spring Data - MongoDB ind

2019-08-19 14:48发布

我使用的是弹簧数据的mongodb-1.2.0.RELEASE。 我有两个类A和B,其中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;
}
}

由于我quering对于那些指的一定A B的所有实例:

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

我需要它来进行索引。

A B实例的第一插入MongoDB的后的索引应该被创建。 正如它下面可以看到没有:

有谁知道我可以创建这样的指标?

此外它看起来像DBREF日提交的(如可通过蒙戈壳中看到),因为它是在定义不匹配的格式的MongoDB文档 。

我失去了一些东西在这里?

Answer 1:

您可以创建蒙戈外壳的指数,但如果你想通过代码既然你这样做是使用弹簧数据MongoDB中,使用此:

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

您还可以指定集合的​​名字,如果你的类的名称不匹配它:

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


Answer 2:

我认为这会工作: @CompoundIndex(name = "b_ref_to_a", def = "{'a.id' : 1}") @Document(collection = "b") public class B {...}

如果没有,你可以调用mongoTemplate.indexOps("b").ensureIndex(...)在带注释的方法@PostConstruct左右



Answer 3:

我有同样的问题,对我来说,ORID的解决方案的工作,但我不得不换行@CompoundIndex一个@CompoundIndexes内,否则它没有工作(我使用的Spring Roo)。

@CompoundIndexes({
    @CompoundIndex(name = "b_ref_to_a", def = "{'a.id' : 1}")
})
@Document(collection = "b")
public class B {...}


Answer 4:

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();


文章来源: Spring Data - MongoDB indexing DBRef