Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDB Aggregation Framework

MongoDB Aggregation Framework

Presentation slides from MongoDC meetup on August 15, 2012 on MongoDB's new Aggregation Framework including some simple examples.

Derek Harmel

August 15, 2012
Tweet

Other Decks in Programming

Transcript

  1. How does it work? 1. Specify a collection to pass

    through pipeline 2. Declare a pipeline of operations 3. Collection passes through pipeline 4. Results returned as a document
  2. The Command d b . r u n C o

    m m a n d ( { a g g r e g a t e : ' < c o l l e c t i o n n a m e > ' , p i p e l i n e : [ { $ < o p e r a t i o n > : . . . } , { $ < o p e r a t i o n > : . . . } , { $ < o p e r a t i o n > : . . . } ] } ) d b . < c o l l e c t i o n n a m e > . a g g r e g a t e ( { $ < o p e r a t i o n > : . . . } , { $ < o p e r a t i o n > : . . . } , { $ < o p e r a t i o n > : . . . } )
  3. The Pipeline Think Unix pipes c a t l o

    g f i l e | g r e p F A T A L | c u t - f 2 - 4 | s o r t - k - n
  4. $match Usual MongoDB f i n d syntax *nix's g

    r e p SQL's W H E R E Use early in the pipeline if possible
  5. $project *nix's a w k SQL's S E L E

    C T Reshape the document Perform computations
  6. $unwind SQL's J O I N (kinda) Creates N documents

    for an array of length N Used often with $ g r o u p operator
  7. $group SQL's G R O U P B Y Groups

    documents by matching field(s) Performs computations and array operations
  8. $sort *nix's s o r t SQL's O R D

    E R B Y Use early in the pipeline if possible
  9. $out (future) Outputs data to a collection Located anywhere within

    a pipeline jira.mongodb.org/browse/SERVER-3253
  10. Comparison Operators $ c m p $ e q $

    g t $ g t e $ l t $ l t e $ n e Accept an array of two values, most return a boolean $ g t : [ ' $ I Q ' , ' $ b o w l i n g S c o r e ' ] / / = > t r u e / / o n l y b e c a u s e I ' m a t e r r i b l e b o w l e r
  11. Arithmetic Operators $ a d d $ d i v

    i d e $ m o d $ m u l t i p l y $ s u b s t r a c t Most accept an array of two values, return a value $ a d d & $ m u l t i p l y accept N values $ a d d : [ ' $ h o u r s O f X b o x ' , ' $ h o u r s O f T v ' , ' $ h o u r s O f R e d d i t ' ] / / = > 2 4 / / c o m p l e t e l y f i c t i o n a l , I s w e a r
  12. String Operators $ s t r c a s e

    c m p $ s u b s t r $ t o L o w e r $ t o U p p e r $ a d d
  13. Date Operators $ d a y O f M o

    n t h $ d a y O f W e e k $ d a y o f Y e a r $ h o u r $ m i n u t e $ m o n t h $ s e c o n d $ w e e k $ y e a r Extract values from a D a t e object
  14. Multi-Expressions $ c o n d similar to a ternary

    operator $ i f N u l l similar to N V L , I F N U L L , C O A L E S C E
  15. / / p r e s e n t a

    t i o n s c o l l e c t i o n { _ i d : 1 , p r e s e n t e r : ' D e r e k H a r m e l ' , r a t i n g : 4 , a t t e n d e e s : 3 2 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' b a d a s s e r y ' ] } { _ i d : 2 , p r e s e n t e r : ' R y a n M c G e a r y ' , r a t i n g : 4 . 5 , a t t e n d e e s : 2 3 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' k i t t e n m i t t e n s ' ] } { _ i d : 3 , p r e s e n t e r : ' N a t h e n H a r v e y ' , r a t i n g : 5 , a t t e n d e e s : 4 0 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' d e v o p s ' ] } / / g o o d p r e s e n t e r s d b . p r e s e n t a t i o n s . a g g r e g a t e ( { $ m a t c h : { r a t i n g : { $ g t : 4 } } } , { $ p r o j e c t : { p r e s e n t e r : 1 } } ) . r e s u l t / / = > [ { _ i d : 2 , p r e s e n t e r : ' R y a n M c G e a r y ' } , { _ i d : 3 , p r e s e n t e r : ' N a t h e n H a r v e y ' } ]
  16. / / p r e s e n t a

    t i o n s c o l l e c t i o n { _ i d : 1 , p r e s e n t e r : ' D e r e k H a r m e l ' , r a t i n g : 4 , a t t e n d e e s : 3 2 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' b a d a s s e r y ' ] } { _ i d : 2 , p r e s e n t e r : ' R y a n M c G e a r y ' , r a t i n g : 4 . 5 , a t t e n d e e s : 2 3 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' k i t t e n m i t t e n s ' ] } { _ i d : 3 , p r e s e n t e r : ' N a t h e n H a r v e y ' , r a t i n g : 5 , a t t e n d e e s : 4 0 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' d e v o p s ' ] } / / p r e s e n t e r s s o r t e d b y p r e s e n t e r s c o r e d b . p r e s e n t a t i o n s . a g g r e g a t e ( { $ p r o j e c t : { p r e s e n t e r : 1 , s c o r e : { $ m u l t i p l y : [ ' $ a t t e n d e e s ' , ' $ r a t i n g ' ] } } } , { $ s o r t : { s c o r e : - 1 } } ) . r e s u l t / / = > [ { _ i d : 3 , p r e s e n t e r : " N a t h e n H a r v e y " , s c o r e : 2 0 0 } , { _ i d : 1 , p r e s e n t e r : " D e r e k H a r m e l " , s c o r e : 1 2 8 } , { _ i d : 2 , p r e s e n t e r : " R y a n M c G e a r y " , s c o r e : 1 1 5 } ]
  17. / / p r e s e n t a

    t i o n s c o l l e c t i o n { _ i d : 1 , p r e s e n t e r : ' D e r e k H a r m e l ' , r a t i n g : 4 , a t t e n d e e s : 3 2 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' b a d a s s e r y ' ] } { _ i d : 2 , p r e s e n t e r : ' R y a n M c G e a r y ' , r a t i n g : 4 . 5 , a t t e n d e e s : 2 3 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' k i t t e n m i t t e n s ' ] } { _ i d : 3 , p r e s e n t e r : ' N a t h e n H a r v e y ' , r a t i n g : 5 , a t t e n d e e s : 4 0 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' d e v o p s ' ] } / / a t t e n d e e s t a t s b y d a y f o r g r e a t t a l k s d b . p r e s e n t a t i o n s . a g g r e g a t e ( { $ m a t c h : { r a t i n g : { $ g t e : 4 . 5 } } } , { $ g r o u p : { _ i d : ' $ d a t e ' , t o t a l : { $ s u m : ' $ a t t e n d e e s ' } , a v g : { $ a v g : ' $ a t t e n d e e s ' } } } ) . r e s u l t / / = > [ { _ i d : I S O D a t e ( " 2 0 1 2 - 0 8 - 1 5 T 0 4 : 0 0 : 0 0 Z " ) , t o t a l : 6 3 , a v g : 3 1 . 5 } ]
  18. / / p r e s e n t a

    t i o n s c o l l e c t i o n { _ i d : 1 , p r e s e n t e r : ' D e r e k H a r m e l ' , r a t i n g : 4 , a t t e n d e e s : 3 2 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' b a d a s s e r y ' ] } { _ i d : 2 , p r e s e n t e r : ' R y a n M c G e a r y ' , r a t i n g : 4 . 5 , a t t e n d e e s : 2 3 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' k i t t e n m i t t e n s ' ] } { _ i d : 3 , p r e s e n t e r : ' N a t h e n H a r v e y ' , r a t i n g : 5 , a t t e n d e e s : 4 0 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' d e v o p s ' ] } / / n u m b e r o f t a l k s b y t o p i c d b . p r e s e n t a t i o n s . a g g r e g a t e ( { $ u n w i n d : ' $ t o p i c s ' } , { $ g r o u p : { _ i d : ' $ t o p i c s ' , t o t a l : { $ s u m : 1 } , } } ) . r e s u l t / / = > [ { _ i d : " k i t t e n m i t t e n s " , t o t a l : 1 } , { _ i d : " b a d a s s e r y " , t o t a l : 1 } , { _ i d : " d e v o p s " , t o t a l : 1 } , { _ i d : " m o n g o d b " , t o t a l : 2 } ]
  19. / / p r e s e n t a

    t i o n s c o l l e c t i o n { _ i d : 1 , p r e s e n t e r : ' D e r e k H a r m e l ' , r a t i n g : 4 , a t t e n d e e s : 3 2 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' b a d a s s e r y ' ] } { _ i d : 2 , p r e s e n t e r : ' R y a n M c G e a r y ' , r a t i n g : 4 . 5 , a t t e n d e e s : 2 3 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' m o n g o d b ' , ' k i t t e n m i t t e n s ' ] } { _ i d : 3 , p r e s e n t e r : ' N a t h e n H a r v e y ' , r a t i n g : 5 , a t t e n d e e s : 4 0 , d a t e : n e w D a t e ( 2 0 1 2 , 7 , 1 5 ) , t o p i c s : [ ' d e v o p s ' ] } / / t o t a l a t t e n d e e s b y t o p i c b y d a y d b . p r e s e n t a t i o n s . a g g r e g a t e ( { $ p r o j e c t : { a t t e n d e e s : 1 , t o p i c s : 1 , y e a r : { $ y e a r : ' $ d a t e ' } , m o n t h : { $ m o n t h : ' $ d a t e ' } , d a y : { $ d a y O f M o n t h : ' $ d a t e ' } } } , { $ u n w i n d : ' $ t o p i c s ' } , { $ g r o u p : { _ i d : { y e a r : 1 , m o n t h : 1 , d a y : 1 , t o p i c s : 1 } , t o t a l : { $ s u m : ' $ a t t e n d e e s ' } } } ) . r e s u l t
  20. [ { _ i d : { y e a

    r : 2 0 1 2 , m o n t h : 8 , d a y : 1 5 , t o p i c s : " m o n g o d b " } , t o t a l : 5 5 } ] { _ i d : { y e a r : 2 0 1 2 , m o n t h : 8 , d a y : 1 5 , t o p i c s : " d e v o p s " } , t o t a l : 4 0 } , { _ i d : { y e a r : 2 0 1 2 , m o n t h : 8 , d a y : 1 5 , t o p i c s : " k i t t e n m i t t e n s " } , t o t a l : 2 3 } , { _ i d : { y e a r : 2 0 1 2 , m o n t h : 8 , d a y : 1 5 , t o p i c s : " b a d a s s e r y " } t o t a l : 3 2 } ]
  21. Resources Aggregation Framework Presentation Slides by Tyler Brock MongoSF 2012:

    MongoDB's New Aggregation Framework Aggregation Framework Operators Reference Aggregation Framework Reference Operations in the New Aggregation Framework