Mam hierarchii klasy zaprojektowany dla powiadomień sklep użytkowników:MongoDB: zapytanie o @DBRef
@Document
public class Notification<T> {
@Id
private String id;
@DBRef
private T tag;
...
}
@Document
public class NotificationA extends Notification<WrappedA> {
}
@Document
public class NotificationB extends Notification<WrappedB> {
}
...
Jest to przydatne dla powracających polimorficzne tablice, pozwalając mi do przechowywania wszelkiego rodzaju danych w polu „tag”. Problem zaczyna się, gdy owinięte obiektów zawiera @DBRef pola:
@Document
public class WrappedA {
@Id
private String id;
@DBRef
private JetAnotherClass referenced;
...
}
Zapytania na polach „tag” działa dobrze:
db.NotificationA.find({"tag.$id": ObjectId("507b9902...32a")})
ale muszę zapytać na polach JetAnotherClass (dwa poziomy pól @DBRef). Próbowałem z notacji dot, a także z podobiektów ale zwraca wartość null:
Dot notacji:
db.NotificationA.findOne({"tag.$referenced.$id": ObjectId("508a7701...29f")})
podobiektów:
db.NotificationA.findOne({"tag.$referenced": { "_id": ObjectId("508a7701...29f") }})
pomocy? Z góry dziękuję!
OK, wygląda na to, że popełniłem błąd koncepcyjny. Czy istnieje sposób rozwiązania tego problemu z klienta Java? – Roi
@Roi Jedynym sposobem na ręczne rozwiązanie strony klienta JOINs jest dość standardowy na wszystkich platformach: http://stackoverflow.com/questions/4067197/mongodb-and-joins – Sammaye