Comment pouvons-nous sélectionner des champs spécifiques dans Spring Data Mongo. J'ai essayé ce qui suit, mais j'ai obtenu une exception de Foo
à String
.
Utiliser @Query
@Query(value="{path : ?0}", fields="{path : 0}")
String findPathByPath(String path);
Non @Query
String findPathByPath(String path);
Voici le modèle de document
@Document(collection = "foo")
public class Foo {
String name, path;
…
}
MongoDB renvoie uniquement les documents JSON pour les requêtes standard. Vous pouvez obtenir ce que vous souhaitez voir en retournant tout de même un List<Foo>
. La propriété fields
dans @Query
fera en sorte que seuls les champs définis sur 1 soient retournés.
@Query(value="{ path : ?0}", fields="{ path : 0 }")
List<Foo> findByPath(String path);
Nous vous recommandons généralement d’introduire un DTO dédié à cet effet afin d’empêcher que l’instance Foo
partiellement remplie ne soit transmise à save(…)
à son tour.
Une autre option consiste à utiliser le cadre d'agrégation, mais c'est plus complexe.
Vous pouvez utiliser
public interface PersonRepository extends MongoRepository<Person, String>
@Query(value="{ 'firstname' : ?0 }",fields="{ 'firstname' : 1, 'lastname' : 1}")
List<Person> findByThePersonsFirstname(String firstname);
}
Plus d'informations dans les données de printemps documentation
Vous pouvez utiliser
Query query = new Query();
query.fields().include("path");
Vous pouvez utiliser la requête ci-dessous pour obtenir des champs spécifiques.
@Query(fields="{path : 1}")
Foo findPathByPath(String path);
Records présents dans DB
{
"name" : "name2",
"path" : "path2"
},
{
"name" : "name3",
"path" : "path3"
}
La requête ci-dessous renvoie l'objet Foo si path = Path3
{
"name": null,
"path": "path3"
}
nous devons spécifier les champs obligatoires avec fieldName: 1 et, si vous n'en avez pas besoin, spécifiez-le avec 0.