2013-07-05 8 views

Antwort

6
@Query(value="{id : $0}", delete = true) 
public Person deleteBy 
+0

Danke !, Arbeitete für mich. (fehlte "delete = true") – andreyro

3

Leider bietet Federdaten keine Methode zum Löschen von Dokumenten basierend auf einer Abfrage. Und die @Query Annotation dient nur zum Suchen von Dokumenten.

Was Sie tun könnten, ist eine custom repository implementieren, die Dokumente basierend auf was Sie wollen gelöscht.

+0

Ich werde einen Blick Dank nehmen! – paul

+1

@Query funktioniert jetzt zum Löschen. Sie fügen @Query (Wert = "{id:? 0}", delete = true) hinzu, wie Marcelo Pasut in Antwort erwähnt. – andreyro

7

Vielleicht können Sie Repository löschen Abfragen verwenden. Hier ist ein Beispiel von documentation:

public interface PersonRepository extends MongoRepository<Person, String> { 
    List <Person> deleteByLastname(String lastname); 

    Long deletePersonByLastname(String lastname);   
} 

Mit Rückgabetyp-Liste wird abrufen und zurückgeben alle entsprechenden Dokumente, bevor sie tatsächlich zu löschen. Ein numerischer Rückgabetyp entfernt direkt die übereinstimmenden Dokumente und gibt die Gesamtzahl der entfernten Dokumente zurück.

+0

Dies scheint das neueste zu sein, also denke ich, dass dies die beste Antwort sein sollte. –

0

Repository:

@Component 
public interface SomeRepository extends MongoRepository<SomeObject, String> { 

    @Query("{ '_id' : ?0 }") 
    SomeObject findById(String _id); 
} 

-Code in irgendeiner Klasse:

@Autowired 
private SomeRepository pRepo; 

public void delete(String id) { 

    pRepo.delete(pRepo.findById(id)); 
} 
+2

Dies führt zu 2 Mongo-Abfragen anstelle eines einzelnen Löschens (Kriterium). –

Verwandte Themen