So finden Sie Kollektionen, die durch Ihre verschachtelten Objekts die objectId in Spring-Daten mit Hilfe von repository-Schnittstelle?
Habe ich eine Sammlung in MongoDB hat, dass Artikel wie diese:
{
"_id" : ObjectId("53e4d31d1f6b66e5163962e3c"),
"name" : "bob",
"nestedObject" : {
"_id" : ObjectId("53f5a623cb5e4c1ed4f6ce67")
//more fields...
}
}
Java-Repräsentation dieses Element sieht folgt aus:
public class SomeObject {
@Id
private String id;
private String name;
private NestedObject nestedObject;
//getters and setters
}
Repository-Schnittstelle ist wie folgt definiert:
public interface SomeObjectRepository extends MongoRepository<SomeObject, String> {
public List<SomeObject> findByName(String name);
public List<SomeObject> findByNestedObjectId(String id);
//some other find functions
}
Nun findByName(String name)
funktioniert, wie es sein sollte, aber findByNestedObjectId(String id)
gibt nichts zurück.
Frage ist: ist es möglich zu finden, die Sammlung Gegenstände von den verschachtelten Objekt-Attribut-repository-Schnittstelle? Wenn nicht, was ist die empfohlene Möglichkeit zur Lösung dieses Problems? Ist es möglich, ohne reimplementing ganze repository?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spring-data-mongodb
würde nicht konvertieren _id Feld ObjectId Typ automatisch in geschachtelten Klasse auf Sie als Vorgang query an. Sie sollten konvertieren Sie Sie manuell. Zum Beispiel:getByNestedObjectId
die Berufung der erstenNestedObject no = nestedObjectRepo.findOne(id)
, und dannSomeObject result = someObjectRepo.findByNestedObject(no)
.The problem exists at version 1.0.4.
spring-data-mongodb-1.0.4.RELEASE
. Danke.Ich habe herausgefunden, wie man dieses Problem lösen.
Ändern Sie den parameter Typ auf org.bson.Typen.ObjectId; String aus
und wenn Sie nennen es verwenden
Wenn
NestedObject
sieht wie folgt aus:und die
String
Wert, den Sie mit der hand in der Abfrage ist eine gültigeObjectId
Abfrage:funktionieren sollte. Wenn es nicht fühlen Sie sich frei, erstellen Sie ein ticket in out JIRA und bieten einen kleinen Testfall zu reproduzieren.
Können Sie die mongoDB-query verwendet das repository mit @Query. Ich bin mir nicht zu 100% mit der folgenden Abfrage ist excact aber so etwas wie dieses:
_id
. Es ist eine gute Antwort, so lange, wie Sie Abfragen an die DB durch etwas anderes als _id. Id ' s unterschiedlich gehandhabt. Beispiel in der mongo-shell:db.somecollection.find({ 'nestedObject._id' : "magicId"})
wieder nichts, währenddb.somecollection.find({ 'nestedObject._id' : ObjectId("magicId") })
tut, ok. Ich habe versucht, hinzufügenObjectId(?0)
zu@Query
aber dann habe ich JSON-parsing-exception von java. Trotzdem, vielen Dank für die schnelle Antwort 🙂Dieser arbeitete für mich auf 1.6.2 spring-data-mongodb. Aber Probleme mit den neuesten Versionen.
Ich bin mit dem folgenden für den Frühling-Booten; funktioniert wie Charme für mich: