mongodb mongoTemplate obtenir un champ distinct avec certains critères

Raj:

Ma structure json MongoDB est

 {
    "_id" : "122134231234234",
    "name" : "Total_pop",
    "description" : "sales category",
    "source" : "public",
    "dataset" :"d1"


},
{
    "_id" : "1123421231234234",
    "name" : "Total_pop",
    "description" : "sales category",
    "source" : "public",
    "dataset" :"d1"


},
{
    "_id" : "12312342332423343",
    "name" : "Total_pop",
    "description" : "sales category",
    "source" : "private",
    "description" : "d1"
}

J'ai besoin d'obtenir une collection distincte de l'ensemble de données dont la source est publique. J'ai essayé cette requête, et cela n'a pas fonctionné:

Criteria criteria = new Criteria();
criteria.where("source").in("public");     
query.addCriteria(criteria);
query.fields().include("name");
query.fields().include("description");
query.fields().include("description");
query.fields().include("source"); List list =
mongoTemplate.getCollection("collectionname").distinct("source", query);

Pouvez vous me donner un coup de main?

Blakes Seven:

D'une part, la .getCollection()méthode renvoie l'objet de base de la collection Driver comme suit:

DBCollection collection = mongoTemplate.getCollection("collectionName");

Le type d'objet de requête peut donc être différent de celui que vous utilisez, mais il y a aussi d'autres choses. A savoir que .distinct()ne renvoie que les valeurs "distint" de la clé que vous avez demandée, et ne renvoie pas d'autres champs du document. Vous pourriez donc faire:

Criteria criteria = new Criteria();
criteria.where("dataset").is("d1");
Query query = new Query();
query.addCriteria(criteria);
List list = mongoTemplate.getCollection("collectionName")
    .distinct("source",query.getQueryObject());

Mais cela ne retournera que "sample" comme un seul élément dans la liste par exemple.

Si vous voulez les "champs" d'un ensemble distinct, utilisez .aggregate()plutôt la méthode. Avec les "premières" occurrences des autres valeurs de champ pour la clé distincte:

    DBCollection colllection = mongoTemplate.getCollection("collectionName");

    List<DBObject> pipeline = Arrays.<DBObject>asList(
        new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
        new BasicDBObject("$group",
            new BasicDBObject("_id","$source")
                .append("name",new BasicDBObject("$first","$name"))
                .append("description", new BasicDBObject("$first","$description"))
        )
    );

    AggregationOutput output = colllection.aggregate(pipeline);

Ou les valeurs "distinctes" réelles de plusieurs champs, en les faisant tous partie de la clé de regroupement:

    DBCollection colllection = mongoTemplate.getCollection("collectionName");

    List<DBObject> pipeline = Arrays.<DBObject>asList(
        new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
        new BasicDBObject("$group",
            new BasicDBObject("_id",
                new BasicDBObject("source","$source")
                    .append("name","$name")
                    .append("description","$description")
            )
        )
    );

    AggregationOutput output = colllection.aggregate(pipeline);

Il existe également une .aggregate()méthode directe sur les instances mongoTemplate, qui dispose d'un certain nombre de méthodes d'assistance pour créer des pipelines. Mais cela devrait au moins vous diriger dans la bonne direction.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment sélectionner un champ avec l'API Mongodb Core Query correspondant à mes critères

Obtenir un sous-document à partir d'un document avec les critères Mongodb Dart

Regex pour valider un nombre avec certains critères

Comment obtenir un décompte distinct d'un champ et additionner un champ dans une liste qui doit être regroupée par certains champs dans Java 8?

Obtenir la date avec certains critères dans le serveur SQL

Mongo agrégation pour un champ DbRef avec mongoTemplate

Comment obtenir la liste des données contenant le nombre d'un champ à l'aide de l'agrégation et des critères dans Spring Boot avec MangoDB

Puis-je interroger un enregistrement avec plusieurs enregistrements associés qui correspondent à certains critères?

Sélectionnez un ensemble spécifique de clients avec certains critères

Mongodb distinct sur un champ de tableau avec une requête regex?

Comment renvoyer le contenu d'un champ indexé imbriqué avec certains champs de premier niveau en utilisant Mongodb?

Comment éviter de taper certains caractères dans un champ?

Comment retourner un autre champ et un champ distinct de mongodb distinct

Comment récupérer un tableau profondément imbriqué en fonction de certains critères spécifiques Spring mongodb

Comment obtenir un champ lié avec typeorm?

Obtenir la valeur avec plusieurs critères

Récupérer une liste de toutes les importations à partir d'un package java avec certains critères

Excel : obtenir un sous-tableau à partir d'une colonne avec plusieurs critères

Impression des paramètres utilisateur (avec certains critères)

Supprimer le texte des colonnes Excel avec certains critères

Excel 2016 VBA Supprimer des lignes avec certains critères

Regroupement de données avec certains critères

Supprimer toutes les lignes sauf celles avec certains critères

Comment filtrer le résultat avec certains critères

Comment additionner un champ interne mongodb et le pousser pendant le regroupement à l'aide de MongoTemplate

Transformez les valeurs de champ en noms de colonne et remplissez-les avec une combinaison de valeurs correspondant à certains critères

mongodb: comment extraire un champ au lieu d'obtenir un objet avec un agrégat + $ lookup + $ project

Comment agréger un champ de tableau distinct dans Mongodb

Comment renvoyer un tableau correspondant à certains critères dans Excel?

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive