聚合(mongodb权威指南第6章)

      mongodb除了基本的查询功能,还提供了很多强大的聚合工具,其中简单的可计算集合中的文档个数,复杂的可利用MapReduce做复杂数据分析。

6.1  count

     返回集合中文档数量

 > db.foo.count()
9
> db.foo.find()
{ "_id" : ObjectId("5149af43ad11c9803e1781ea"), "bar" : "baz" }
{ "_id" : ObjectId("5149d1ffad11c9803e1781eb"), "xx" : 2 }
{ "_id" : ObjectId("514c7dce127bab4493992956"), "name" : "king", "age" : 20 }
{ "_id" : ObjectId("514c7dda127bab4493992957"), "name" : "king1", "age" : 25 }
{ "_id" : ObjectId("514c7de3127bab4493992958"), "name" : "king2", "age" : 21 }
{ "_id" : ObjectId("514c85c1127bab4493992959"), "name" : 234, "age" : 30 }
{ "_id" : ObjectId("514d0c6be30a115bf216e111"), "name" : null, "age" : 28 }
{ "_id" : ObjectId("514d19c7e30a115bf216e114"), "apple" : 1, "banana" : 6, "peac
h" : 3 }
{ "_id" : ObjectId("514d19fbe30a115bf216e115"), "apple" : 8, "spinach" : 4, "wat
ermelon" : 3 }
> db.foo.count({"name":"king"})
1

 

6.2 distinct

    找出给定键的所有不同的值,使用时不需指定集合和键。

 > db.runCommand({"distinct":"foo","key":"name"})
{
        "values" : [
                "king",
                "king1",
                "king2",
                234,
                null
        ],
        "stats" : {
                "n" : 9,
                "nscanned" : 9,
                "nscannedObjects" : 9,
                "timems" : 58,
                "cursor" : "BasicCursor"
        },
        "ok" : 1
}
> db.runCommand({"distinct":"foo","key":"age"})
{
        "values" : [
                20,
                25,
                21,
                30,
                28
        ],
        "stats" : {
                "n" : 9,
                "nscanned" : 9,
                "nscannedObjects" : 9,
                "timems" : 0,
                "cursor" : "BasicCursor"
        },
        "ok" : 1
}

    有没有一种方法或得集合里面所有不同的键呢?起码没有内置的,不过可以用MapRedule.

6.3 group

    先选定分组以来的键,然后mongodb就会将集合依据选定键值的不同分成若干组,然后可以通过聚合每一组内的文档,产生一个结果文档。

    

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/kingwjb/blog/115291

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值