2014-07-16 6 views
0

J'ai une configuration simple du document:MongoDB requête avec somme

{ 
    VG: "East", 
    Artikellist: { 
     Artikel1: "Sprite", 
     Amount1: 1, 
     Artikel2: "Fanta", 
     Amount2: 3 
    } 
} 

en fait, je veux juste interroger ces documents pour obtenir une liste de vente articels dans chaque VG, ou peut-être la ville, n'a pas d'importance. En outre, la requête devrait additionner le montant de chaque produit et me le restituer.

Je sais que je pense dans un langage SQL, mais c'est en fait le cas.

idée mai est ce ici:

db.collection.aggregate([{ 
    $group: { 
     _id: { 
      VG: "$VG", 
      Artikel1: "$Artikellist.Artikel1", 
      Artikel2: "$Artikellist.Artikel2", 
      $sum: "$Artikellist.Amount1", 
      $sum: "$Artikellist.Amount2" 
     }, 
    } 
}]); 

point le plus dur ici que j'ai 5 valeurs différentes pour VG et et il pourrait être maximum de 5 Artikel et en ce qui concerne les montants dans une liste.

Donc j'espère que vous pouvez m'aider ici. Sry pour mon mauvais anglais et pour mon badder Mongo Skills.

+0

$ Somme et les gens ne fonctionnent que sur les champs avec mêmes noms. Vous devriez avoir des objets comme {"artikel": "name", "amount": "20"} dans un tableau ou une collection. –

Répondre

1

Si Artikel1 est toujours « Sprite » et Artikel2 - « Fanta », alors vous pouvez essayer celui-ci:

db.test.aggregate({$group : { _id : {VG : "$VG", Artikel1 : "$Artikellist.Artikel1", Artikel2 : "$Artikellist.Artikel2"}, Amount1 : {$sum : "$Artikellist.Amount1"},Amount2 : {$sum : "$Artikellist.Amount2"}}}); 

Si les valeurs de Artikel1 et Artikel2 peuvent varier, je suggère de modifier la structure du document dire:

{ 
VG: "East", 
Artikellist: [ 
    { Artikel: "Sprite", 
     Amount: 1}, 
    { Artikel: "Fanta", 
    Amount: 3 } 
]} 

puis utilisez l'approche suivante:

db.test.aggregate({$unwind : "$Artikellist"}, {$group : {_id : {VG : "$VG", Artikel : "$Artikellist.Artikel"}, Amount : {$sum : "$Artikellist.Amount"}}}) 
+0

Merci pour votre aide :) Fonctionne comme prévu :) – user3845857