# Nested Aggregations : grouper par attribut d'un parent

**URL:** <https://discuss.elastic.co/t/nested-aggregations-grouper-par-attribut-dun-parent/32020>\
**Category:** Discussions en français\
**Created:** [October 12, 2015, 3:57pm UTC](https://discuss.elastic.co/t/nested-aggregations-grouper-par-attribut-dun-parent/32020 "2015-10-12T15:57:29Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![t.choquet](https://avatars.discourse-cdn.com/v4/letter/t/eb8c5e/32.png) [@t.choquet](https://discuss.elastic.co/u/t.choquet)\
**Post date:** [October 12, 2015, 3:57pm UTC](https://discuss.elastic.co/t/nested-aggregations-grouper-par-attribut-dun-parent/32020/1 "2015-10-12T15:57:29Z")

</div>

Bonjour, je cale pour récupérer les résultats d'une agrégation avec des objets imbriqués.

Soit le mapping suivant :

```
{  
   "mappings":{  
      "client":{  
         "_all":{  
            "enabled":false
         },
         "properties":{  
            "id":{  
               "type":"integer"
            },
            "commande":{  
               "type" : "nested",
               "include_in_parent": true,
               "properties":{  
                  "magasin":{  
                     "type":"string"
                  },
                  "paiement":{  
                     "type":"string"
                  },
                  "montant":{  
                     "type":"integer"
                  },
                  "panier":{  
                     "type" : "nested",
                     "include_in_parent": true,
                     "properties":{  
                        "categorie":{  
                           "type":"string"
                        },
                        "montant":{  
                           "type":"integer"
                        },
                        "quantite":{  
                           "type":"integer"
                        }
                    ...
}

```

Je veux récupérer la somme des montants des paniers par type de paiement,  
( somme des **client.commande.panier.montant** regroupés par **client.commande.paiement** )

Si je lance la requête suivante ( :

```
{
   "size": 0,
   "aggs": {
      "paniers": {
         "aggs": {
            "commande_panier_montant": {
               "sum": {
                  "field": "commande.panier.montant"
               }
            }
         },
         "terms": {
            "field": "commande.paiement",
            "size": "5",
            "order": {
               "commande_panier_montant": "desc"
            }
         }
      }
   }
}

```

J'obtiens le résultat suivant :

```
"aggregations": {
      "paniers": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": "Carte bancaire",
               "doc_count": 3,
               "commande_panier_montant": {
                  "value": 6537
               }
            },
            {
               "key": "Chèque",
               "doc_count": 2,
               "commande_panier_montant": {
                  "value": 6233
               }
            },
            {
               "key": "Espèce",
               "doc_count": 2,
               "commande_panier_montant": {
                  "value": 6233
               }
            }
         ]
      }
   }

```

Elasticsearch additionne le montant des paniers de tous les clients contenant **au moins une** commande avec le moyen de paiement concerné. Ce résultat est donc faux car ce n'est pas l'addition des montants des paniers mais de tous les paniers contenus dans une ligne .

SI je fais une requête en ajoutant une agrégation imbriqué en ajoutant le paramètre suivant :

```
"nested": {
        "path": "commande"
},

```

cela donne la requête suivante :

```
{
   "size": 0,
   "aggs": {
      "paniers": {
         "nested": {
            "path": "commande.panier"
         },
         "aggs": {
            "groupby": {
               "terms": {
                  "field": "commande.paiement",
                  "size": "5",
                  "order": {
                     "commande_panier_montant": "desc"
                  }
               },
               "aggs": {
                  "commande_panier_montant": {
                     "sum": {
                        "field": "commande.panier.montant"
                     }
                  }
               }
            }
         }
      }
   }
}

```

et cela me renvoi les résultats suivants :

```
"aggregations": {
      "paniers": {
         "doc_count": 65,
         "groupby": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": []
         }
      }
   } 

```

Aucun résultat, mais on voit que les 65 paniers ont bien été trouvés car ils apparaissent dans le "doc\_count"

Je suppose que le problème vient du fait que "commande.paiement" se situe au dessus de "commande.panier" dans le mapping, et que cela rend l'agrégation impossible à cause du filtrage par **"nested": { "path": "commande.panier" }**

Est-il possible de faire une requête qui me retournerait l'agrégation imbriqué que je souhaite ?

Merci,  
TC

---

<div class="post-metadata">

**Author:** ![Camilo\_Sierra](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/camilo_sierra/32/14397_2.png) [@Camilo\_Sierra](https://discuss.elastic.co/u/Camilo_Sierra)\
**Post date:** [October 14, 2015, 9:30am UTC](https://discuss.elastic.co/t/nested-aggregations-grouper-par-attribut-dun-parent/32020/2 "2015-10-14T09:30:32Z")

</div>

hello @t.choquet alors sans les data difficile a jouer avec les requetes pour trouve le probleme, apres je dirais que la requete devrait etre du genre :

```
{
    "size": 0,
    "aggs": {
        "paniers": {
            "nested": {
                "path": "commande"
            },
            "aggs": {
                "groupby": {
                    "terms": {
                        "field": "commande.paiement",
                        "size": "5",
                        "order": {
                            "commande_panier_montant": "desc"
                        }
                    },
                    "aggs": {
                        "montant": {
                            "nested": {
                                "path": "commande.panier"
                            },
                            "aggs": {
                                "commande_panier_montant": {
                                    "sum": {
                                        "field": "commande.panier.montant"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
} 

```

si ça marche pas, tu peut rajouter aussi un set de data qu'on puisse inserer rapidement pour pouvoir tester ?

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:50pm UTC](https://discuss.elastic.co/t/nested-aggregations-grouper-par-attribut-dun-parent/32020/3 "2017-07-06T13:50:58Z")

</div>


