ich eine Klassenhierarchie für Speichern von Benutzerbenachrichtigungen entworfen haben:MongoDB: Abfrage von @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> {
}
...
Dies ist nützlich für polymorphe Arrays Rückkehr, so dass ich jede Art von Daten, die in dem „Tag“ Feld zu speichern. Das Problem beginnt, wenn die verpackten Objekte @DBRef Felder enthält:
@Document
public class WrappedA {
@Id
private String id;
@DBRef
private JetAnotherClass referenced;
...
}
Abfragen auf den Bereichen „tag“ funktioniert:
db.NotificationA.find({"tag.$id": ObjectId("507b9902...32a")})
Aber ich brauche auf den Bereichen JetAnotherClass (zwei Ebenen abfragen von @DBRef-Feldern). Ich habe mit Punktnotation versucht und auch mit Subobjekte aber es gibt null zurück:
Dot Notation:
db.NotificationA.findOne({"tag.$referenced.$id": ObjectId("508a7701...29f")})
Subobjekte:
db.NotificationA.findOne({"tag.$referenced": { "_id": ObjectId("508a7701...29f") }})
Hilfe? Vielen Dank im Voraus!
Ok, es scheint, ich habe einen konzeptionellen Fehler gemacht. Gibt es eine Möglichkeit, dies vom Java-Client zu lösen? – Roi
@Roi Die einzige Möglichkeit ist, die JOINs-Client-Seite manuell aufzulösen, es ist ziemlich Standard für alle Plattformen: http://StackOverflow.com/questions/4067197/mongodb-and-joins – Sammaye