Spring Data MongoDB - Rückgabe nur ein Element aus einem verschachtelten Array mit @Query oder Mongotemplate und $ elemmJava

Java-Forum
Guest
 Spring Data MongoDB - Rückgabe nur ein Element aus einem verschachtelten Array mit @Query oder Mongotemplate und $ elemm

Post by Guest »

Mein Modell besteht aus einer Sammlung von (CAR-) Modellen mit einer verschachtelten Sammlung von Kraftstofftypen ("Diesel", "Benzin", "Hybrid"). Jeder Kraftstoff verfügt über eine weitere verschachtelte Sammlung von Türen.

Code: Select all

{ _id : 'Ford Focus' , fuels : [ {_id : "Diesel" : "doors" : [2 , 3]} , {_id: "Gasoline" , doors :  [2, 3, 4, 5] } ] }
< /code>

Wenn ich die für ein bestimmtes Modell und Kraftstofftyp verfügbaren Türen zur Verfügung stellen möchte, kann ich ausführen: < /p>

db.models.find( {"_id" : "Ford Focus" , "fuels._id" : "Diesel"}  , { 'fuels' : {$elemMatch: {_id: "Diesel"}  } })
< /code>

Wie kann ich das in eine @Query -Methode in einem Spring Data Repository übersetzen? < /p>

@Query(value="{ 'id' : ?0 , 'fuel' : ?1 }")
public Model findDoors(Integer model, String fuel);
< /code>

Die obige Implementierung gibt ein Dokument mit einem verschachtelten Array mit allen Arten von Kraftstoffen zurück, nicht nur der als Parameter übergebene. Wo kann ich die $ Elemmatch -Projektion in ein Spring Data Repository einfügen? Die Mongotemplate und die BasicQuery -Klasse folgen diesem Beitrag < /p>

public Model findDoors(Integer model, String fuel){
Criteria findModelCriteria = Criteria.where("id").is(model);
Criteria findFuelCriteria = Criteria.where("fuels").elemMatch(Criteria.where("id").is(fuel));
BasicQuery basicQuery = new BasicQuery(findModelCriteria.getCriteriaObject(), findFuelCriteria.getCriteriaObject());

return mongoTemplate.findOne(basicQuery, Model.class);
}
< /code>

In diesem Fall erhalte ich eine Ausnahme, wenn der Konstruktor von PropertyPath < /code> aufgerufen wird, da er versucht, auf ein Feld namens $ elemmatch in Model.class zuzugreifen (???) < /p>

Caused by: java.lang.IllegalAccessError
at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134)
at org.springframework.data.mapping.PropertyReferenceException.(PropertyReferenceException.java:59)
at org.springframework.data.mapping.PropertyPath.(PropertyPath.java:75)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post