zoukankan      html  css  js  c++  java
  • MongoDB Aggregate

    1. $sum: add 1 for each document in group

    example1:

    select manufacturer,count(*) from xx

    group by manufacturer

    {
        "_id" : ObjectId("50b1aa983b3d0043b51b2c52"),
        "name" : "Nexus 7",
        "category" : "Tablets",
        "manufacturer" : "Google",
        "price" : 199
    }
    db.products.aggregate([  // don't forget the bracket
        {$group:
         {
    	 _id:"$manufacturer", 
    	 num_products:{$sum:1}
         }
        }
    ])

     result

    { "_id" : "Amazon", "num_products" : 2 }
    { "_id" : "Sony", "num_products" : 1 }
    { "_id" : "Samsung", "num_products" : 2
    { "_id" : "Google", "num_products" : 1 }
    { "_id" : "Apple", "num_products" : 4 }

     example2:

    sum pop for each state

    {
        "city" : "CLANTON",
        "loc" : [
            -86.642472,
            32.835532
        ],
        "pop" : 13990,
        "state" : "AL",
        "_id" : "35045"
    }
    db.zips.aggregate([
    {$group:
        {_id:"$state","population":{$sum:"$pop"}}
    }
    ])
    { "_id" : "WA", "population" : 4866692 }
    { "_id" : "HI", "population" : 1108229 }
    { "_id" : "CA", "population" : 29754890 }
    { "_id" : "OR", "population" : 2842321 }
    { "_id" : "NM", "population" : 1515069 }
    { "_id" : "UT", "population" : 1722850 }
    { "_id" : "OK", "population" : 3145585 }
    { "_id" : "LA", "population" : 4217595 }

    group id as a document

    db.zips.aggregate([{$group:{"_id":{"state":"$state","city":"$city"}}}])

    2. $avg: average

    average population of a zipcode for each state

    db.zips.aggregate([
    {$group:
        {_id:"$state","avg_pop":{$avg:"$pop"}}
    }
    ])

     3. $addToSet

    find all zipcode for a city

    { "city" : "PALO ALTO", "loc" : [ -122.149685, 37.444324 ], "pop" : 15965, "state" : "CA", "_id" : "94301" }
    { "city" : "PALO ALTO", "loc" : [ -122.184234, 37.433424 ], "pop" : 1835, "state" : "CA", "_id" : "94304" }
    { "city" : "PALO ALTO", "loc" : [ -122.127375, 37.418009 ], "pop" : 24309, "state" : "CA", "_id" : "94306" }
    db.zips.aggregate([
    {$group:
        {"_id":"$city","postal_codes":{$addToSet:"$_id"}}
    }])

     4. $push: similar to $addToSet, but has duplicate

     5. $max, $min

    6. double $group stage

    { "_id" : 0, "a" : 0, "b" : 0, "c" : 21 }
    { "_id" : 1, "a" : 0, "b" : 0, "c" : 54 }
    { "_id" : 2, "a" : 0, "b" : 1, "c" : 52 }
    { "_id" : 3, "a" : 0, "b" : 1, "c" : 17 }
    { "_id" : 4, "a" : 1, "b" : 0, "c" : 22 }
    { "_id" : 5, "a" : 1, "b" : 0, "c" : 5 }
    { "_id" : 6, "a" : 1, "b" : 1, "c" : 87 }
    { "_id" : 7, "a" : 1, "b" : 1, "c" : 97 }
    db.fun.aggregate([
    {$group:
        {_id:{a:"$a", b:"$b"}, c:{$max:"$c"}}
    }, 
    {$group:
        {_id:"$_id.a", c:{$min:"$c"}}
    }])

     7. $projection

    data

    {
        "city" : "ACMAR",
        "loc" : [
            -86.51557,
            33.584132
        ],
        "pop" : 6055,
        "state" : "AL",
        "_id" : "35004"
    }

    project to

    {
        "city" : "acmar",
        "pop" : 6055,
        "state" : "AL",
        "zip" : "35004"
    }

    cmd

    db.zips.aggregate([
    {$project:
        {_id:0, city:{$toLower:"$city"}, pop:1, state:1, zip:"$_id"}
    }
    ])

     8. $match

    filters for zipcodes with pop greater than 100,000 people

    db.zips.aggregate([
    {$match:
        {"pop":{$gt:100000}}
    }
    ])

    match or

    db.zips.aggregate([{$match:{"state":{$in:["NY","CA"]}}}])
    $match:{$or:[{author:"dave"},{author:"john"}]}

    http://stackoverflow.com/questions/16902930/mongodb-aggregation-framework-match-or 

    9. full text search

    the search field should have text index before searcg

    db.s.aggregate([
        {$match:
            {$text:{$search:"tree rat"}}
        }
    ])

     10. $sort

     sort by (state, city), both ascending

    db.zips.aggregate([
    {$sort:
        {"state":1,"city":1}}
    ])

     11. $unwind: opposite of $push

    db.posts.aggregate([
        /* unwind by tags */
        {"$unwind":"$tags"}
    ]}

     12. $out: redirect to a new collection, drop previous if exists

    db.a.aggregate([
        {$out:"collection_name"}
    ])

     13. aggregation option

    explain

    db.zips.aggregate([{$group:{_id:"$state",popu:{$sum:"$pop"}}}],
        {explain:true}
    )
    db.zips.aggregate([{$group:{_id:"$state",popu:{$sum:"$pop"}}}],
        {allowDiskUse:true}
    )
  • 相关阅读:
    Java Lock Example – ReentrantLock(java锁的例子)
    Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor Example(ScheduledThreadPoolExecutor例子——了解如何创建一个周期任务)
    ThreadPoolExecutor – Java Thread Pool Example(java线程池创建和使用)
    Java Timer TimerTask Example(java Timer的例子)
    Java ThreadLocal Example(java中的ThreadLocal例子)
    Thread Safety in Java(java中的线程安全)
    java 线程方法join的简单总结
    JAVA多线程和并发基础
    BAT面试常的问题和最佳答案
    linux服务脚本编写
  • 原文地址:https://www.cnblogs.com/phoenix13suns/p/4010366.html
Copyright © 2011-2022 走看看