2017-09-17 23 views
0

J'utilise mongodb dans mon application de démarrage de printemps et j'utilise l'interface de dépôt mongo pour obtenir des données de la base de données c'est ainsi que je reçois les données.comment devrais-je obtenir des données de mongo db en utilisant le dépôt de spring mongo?

 School sch=repository.findOne("id"); 

cela me donnera l'objet école alors je peux obtenir toutes les données à partir de là, mais ma question est cela affectera la performance de ma demande si je reçois tout l'objet chaque fois que je besoin des données de cet objet, même si je besoin de quelques champs. si oui quelle sera la méthode à faire que j'ai cherché et je vois qu'en utilisant l'annotation Query je peux limiter les champs mais même alors il donne l'objet entier il met tous les autres champs à zéro et les données sont seulement aux champs que je spécifie. toute indication sera utile.

+0

Les performances impliquent trop de variables, cela dépend de ce qui est une bonne performance pour vous, mais si vous devez réduire le nombre de fois que l'application lit la base de données, vous pouvez utiliser Caching https://spring.io/guides/gs/mise en cache /. –

+0

bien mon exigence est comme ceci dans quelques pages je seulement besoin d'un champ dans certains cas j'ai besoin de plusieurs champs si je considère l'évidence quand j'ai besoin de plusieurs champs je devrais obtenir l'objet entier et quand j'ai besoin simple Voulez-vous savoir s'il y a un avantage dans la performance de la base de données ou non sur la requête et pas sur la taille de la réponse – ashutosh

Répondre

1

Vous pouvez utiliser une interface de projection pour récupérer un sous-ensemble d'attributs. Spring Data Mongo DB

interface NamesOnly { 
    String getName(); 
} 

interface SchoolRepository extends Repository<School, UUID> { 
    NamesOnly findOneById(String id); 
} 
+0

Comment puis-je interroger en utilisant id et obtenir un champ unique dans plusieurs cas, je ne peux utiliser findOneById qu'une seule fois . – ashutosh

0

après avoir lu la documentation et la lecture d'autres options c'est la seule solution que je trouve où je peux rechercher le résultat à l'aide id et obtenir seul champ que je veux dans le résultat depuis que je ne suis que la recherche en utilisant l'identifiant donc je dois surcharger le findbyId et puisque l'interface de projection ne change que le type de retour, je ne peux pas l'utiliser alors voici ce que j'ai fait.

 @Query(value="{_id:?0}",fields="{?1:1,?2:1}") 
List<School> findById(String schoolId, String fieldOne,String fieldTwo); 

ici? 0 est un espace réservé pour SCHOOLID et 1 et 2? Sont l'espace réservé pour les champs nom si maintenant je peux créer ces méthodes surchargées que je peux utiliser pour tout pas de champs de la sortie est la liste de l'école puisque j'utilise l'identification qui est la clé primaire donc c'est juste une liste d'objet d'école ainsi je peux juste obtenir (0) pour obtenir mon objet scolaire et il aura tous les autres champs comme nul c'est le meilleur que je pourrais trouver partagez votre pensée pour l'améliorer j'aimerais entendre d'autres solutions.