À n’en pas douter, être capable de supprimer un document existant est une nécessité. Peut-être avez-vous déjà anticipé la façon de faire pour supprimer un document ? Utiliser des méthodes existantes de Spring Data !
Pour vous les présenter, j’ai choisi de vous montrer ce que propose mon IDE grâce à l’autocomplétion. Voici les méthodes qui sont déjà implémentées :
Nous pouvons dire que nous avons le choix ! Examinons cette liste :
delete(Post entity) : supprime le post qui est fourni en paramètre, c’est une suppression unitaire ;
deleteAll() : soyez prudent car cette méthode supprime tous les documents de la collection ;
deleteAll(Iterable<? extends Post> entities) : supprime tous les posts fournis via une liste ;
deleteAllById(Iterable<? extends String> ids) : supprime tous les posts qui correspondent aux id fournis via une liste ;
deleteById(String id) : supprime le post qui correspond à l’id indiqué en paramètre : c’est une suppression unitaire.
Comment je choisis ma méthode, alors ?
Choisissez la méthode en fonction de votre besoin. Dans la mesure où nous avons accès à l’id de nos documents, j’ai personnellement une préférence pour deleteById() plutôt que delete(). Cela évite d’avoir à créer un objet Java, alors que tout ce dont nous avons besoin est l’id.
D’ailleurs, observons le code ci-dessous :
@Override
public void run(String... args) throws Exception {
// Creating a Post object with the name which we are looking for
Post existingPost = new Post();
existingPost.setName("Welcome on board! [updated]");
Example<Post> example = Example.of(existingPost);
// Getting the searched Post
existingPost = postRepository.findOne(example).get();
// Deleting the post
postRepository.deleteById(existingPost.getId());
}
J’ai repris le code de la section précédente pour récupérer un article existant.
Ensuite, j’ai appelé la méthode deleteById en fournissant l’id de l’article récupéré.
Le résultat est que le document a été supprimé de la base de données, comme souhaité.
Dans ce chapitre et les précédents, je vous ai présenté les méthodes existantes de l’interface MongoRepository, mais si vous rencontrez un cas particulier et que les méthodes existantes ne vous suffisent pas, n’hésitez pas à :
utiliser des requêtes dérivées ;
utiliser des requêtes natives (avec l’annotation @Query).
À vous de jouer
Implémentez la suppression d’un tutoriel de votre choix.
Vérifiez que la suppression a bien été effectuée, en consultant la liste des tutoriels.
N’hésitez pas à vérifier votre travail en consultant le repository GitHub du cours à la branche p3c3. Il contient le code correspondant pour tout ce chapitre.
En résumé
Plusieurs méthodes permettent de supprimer nos données, que ce soit unitairement (par exemple avec deleteById) ou bien par lot (par exemple avec deleteAll).
Spring Data MongoDB vous permet d’aller au-delà des opérations déjà implémentées grâce aux requêtes dérivées et aux requêtes natives.
Nous voilà déjà à la fin de ce cours ! Quel plaisir ce fut de vous accompagner et de vous montrer comment utiliser Spring Data MongoDB !
Vous savez désormais configurer un projet Java Spring Boot pour qu’il puisse interagir avec une base MongoDB.
Vous avez appris à modéliser vos documents en classe Java, à récupérer des données mais aussi à créer, modifier et supprimer des données. Pour réussir ces actions, vous avez tiré pleinement profit de l’interface MongoRepository et vous avez écrit des requêtes personnalisées. Vous savez également implémenter des projections et des agrégations !
Vous pouvez encore aller plus loin :
en améliorant votre compréhension du langage natif de MongoDB ;
en complexifiant la structure des documents que vous exploitez ;
en vous intéressant aux problématiques de performance ;
et bien sûr, en apprenant à intégrer cette couche d’accès aux données au sein des applications Java Spring.
J’espère de tout cœur que ce cours aura répondu à vos attentes, et je souhaite que vous puissiez encore étendre vos connaissances et compétences.