2017-10-15 5 views
0

ProblèmeQuelle est la meilleure façon de récupérer le nombre d'utilisateurs avec des profils complets et incomplets en utilisant spring boot et mongodb?

1) Je dois afficher le nombre total d'utilisateurs avec des profils incomplets et complets.

2) Les profils incomplets sont ceux qui auront 4 champs de type chaîne. À part cela, tous sont des profils complets.

Ci-dessous mon champs de classe modèle

@Id 
private String id; 
private String[] imageIds; 
private String concerns; 
private String summary; 
private String likings; 
private String occupation; 
private String religion; 
private String education; 
private String height; 
@GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE) 
private double[] location; 
private INTERESTS[] interests; 
private String fcmId; 
private List connections; 
private List declined; 
private List pending; 

code J'ai écrit:

1) MySql je peux appliquer une requête directe qui est similaire à

a) Select count (*) à partir de X où a est NULL ou b EST NULL -> Pour les profils incomplets

b) Sélectionnez le nombre (*) à partir de X où a n'est pas NULL ou b IS NOT NULL -> Pour CompleteProfiles

Mais ici,

2) Je peux utiliser la méthode findAll() pour récupérer tous les utilisateurs dans une liste des utilisateurs, puis vérifier pour chaque utilisateur en utilisant si user.getA() ou user.getB() n'importe lequel des champs est null.IF oui, nombre de profils incomplets compte pour les profils Completebb.

Ensuite, je peux retourner ces deux comte de un frontEndUSer dans un HashMap

Quelqu'un peut-il me guider si cela est une façon correcte et sinon comment le faire de manière beaucoup plus efficace et plus efficace en utilisant Spring Boot et MongoData Repository.

Ci-dessous mon code pour le même

@RequestMapping(value = "/showprofiles", method = RequestMethod.GET) 
public Map showProfiles(HttpServletResponse response) { 
    int pageSize=2000; 
    Page<User> users=null; 
    int page=0; 
    int countInComplete=0; 
    int countComplete=0; 
    Map hm=null; 
    users = userService.getAllUsers(new PageRequest(page,pageSize)); 
    do { 
     users = userService.getAllUsers(new PageRequest(page,pageSize)); 
     for (User user : users) { 
      if (user.getName() == null || user.getGender() == null || user.getInterests() == null || user.getImageIds() == null) { 
       countInComplete++; 
      } 
      else{ 
       countComplete++; 
      } 
     } 
     page++; 
    }while (users.hasNext()); 
    hm=new HashMap(); 
    hm.put("countComplete",countComplete); 
    hm.put("countInComplete",countInComplete); 
    return hm; 
} 

Répondre

1

Vous pouvez résoudre votre problème avec le printemps de données MongoDB. Jetez un oeil here . Je suppose que vous utilisez un référentiel.

@Annotation public interface UserRepository extends ... { 
    List<User> findByNameNullOrGenderNullOrInterestsNullOrImageIdsNull(); 
} 

Je pense que cela devrait fonctionner. Essayer ceci dehors montrez dans les Docs et trouvez la meilleure combinaison.