Używam danych sprężynowych-mongodb-1.2.0.RELEASE. Mam dwie klasy A i B, gdzie B ma odniesienie do A i jest opatrzone adnotacją @DBRef.Dane sprężyny - indeksowanie MongoDB DBRef
Klasa 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;
}
}
Klasa 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;
}
}
Odkąd jestem quering dla wszystkich wystąpień B, które są nawiązujące do pewnego A:
B fromDB = mongoOperations.findOne(Query.query(Criteria.where("a.$id").is(a1.id)), B.class);
I trzeba go zindeksować.
Po pierwszym wstawieniu instancji B do MongoDB powinien zostać utworzony indeks. Jak widać poniżej, nie ma:
Czy ktoś wie, jak mogę utworzyć taki indeks?
Dodatkowo wygląda na to, że DBRef (jak widać w powłoce mongo) nie pasuje do formatu zdefiniowanego w MongoDB documentation.
Czy tu czegoś brakuje?
Dziękuję za pomoc. Dlaczego indeks nie jest tworzony, mimo że ma adnotację @Indexed? i innym otwartym pytaniem jest dlaczego dokumentacja MongoDB pokazuje DBRef w innym formacie niż ten, który można zobaczyć na migawce powłoki Mongo – Modi
Co do @Indexed, to nie jest naprawdę udokumentowane, ale nie sądzę, że jest odpowiedni dla złożonego typy nigdy nie pracowały dla mnie. Osobiście używam jednej z dwóch wyżej wymienionych metod do indeksowania typu "złożonego". Co do drugiego wydania, jakiej wersji powłoki Mongodb używasz? spróbuj 'db.d.find ({}, {" a. $ ref ": 1," a. $ id ": 1})" co otrzymujesz? –
Używam Mongo DB i wersji powłoki 2.4.1. Mogę wykonać kolejne zapytania: db.b.find ({"a. $ Id":}, {"a. $ Id": 1}) i db.b.find ({"a. $ id ": }, {" a. $ ref ": 1}), ale Nie mogę dołączyć a. $ ref i a. $ id do argumentu projekcji, a argument warunku musi zawierać" a. $ id ". Najważniejsze jest to, że aby użyć indeksu utworzonego na "a", element zapytania musi zawierać identyfikator a. $ Id a. $ Ref: db.b.find ({a: {"$ ref": a, "$ id": }}) –
Modi