MongoDB聚合

一: 聚合

      常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce。

1、count:返回集合中的文档个数
       > db.foo.count()
2、distinct:找出给定键的所有不同的值。使用时必须指定集合和键
       > db.runCommand({"distinct":"mycolldis","key":"age"})   mycolldis为“集合”名称,age为“键”名称
       例如:假设有如下文档:
       {"name":"Ada","age":20}
       {"name":"Fred","age":35}
       {"name":"Susan","age":60}
       {"name":"Andy","age":35}
       对"age"键使用distinct,获得所有不同的年龄:
       > db.runCommand({"distinct":"mycolldis","key":"age"})   mycolldis为“集合”名称,age为“键”名称
       {"values":[20,35,60],"ok":1}
       完美实例
       1、创建集合
          > use test
          > db.mycolldis.save({})
       2、为“mycolldis集合”添加“键/值”
          > db.mycolldis.insert({"age":10})
          > db.mycolldis.insert({"age":20})
          > db.mycolldis.insert({"age":30})
          > db.mycolldis.insert({"age":20})
          > db.mycolldis.insert({"age":60})
          > db.mycolldis.insert({"age":60})
       3、查看信息
          > db.mycolldis.find()
       4、对"age"键使用distinct,获得所有不同的年龄
          > db.runCommand({"distinct":"mycolldis","key":"age"})
       5、结果
          {
                    "values":[

                                   10,

                                   20,

                                   30,

                                   60
                    ],
                    "stats":{                                   

                                   "n":7,
                                   "nscanned":7,
                                   "nscannedBojects":7,
                                   "timems":0,
                                   "cursor":"BasicCursor",
                    },
                    "ok":1
          }

3、group

4、mapReduce

   是聚合函数中最复杂的了,不过复杂也好,越复杂就越灵活。

  mapReduce其实是一种编程模型,用在分布式计算中,其中有一个“map”函数,一个”reduce“函数。

   ① map:

          这个称为映射函数,里面会调用emit(key,value),集合会按照你指定的key进行映射分组。

   ② reduce:

         这个称为简化函数,会对map分组后的数据进行分组简化,注意:在reduce(key,value)中的key就是emit中的key,vlaue为emit分组后的emit(value)的集合,这里也就是很多{"count":1}的数组。

   ③ mapReduce:

          这个就是最后执行的函数了,参数为map,reduce和一些可选参数。

二:游标

    mongodb里面的游标有点类似我们说的C#里面延迟执行,比如:

    var list=db.person.find();

    针对这样的操作,list其实并没有获取到person中的文档,而是申明一个“查询结构”,等我们需要的时候通过for或者next()一次性加载过来,然后让游标逐行读取,当我们枚举完了之后,游标销毁,之后我们在通过list获取时,发现没有数据返回了。

    当然我们的“查询构造”还可以搞的复杂点,比如分页,排序都可以加进去。

    var single=db.person.find().sort({"name",1}).skip(2).limit(2);

    那么这样的“查询构造”可以在我们需要执行的时候执行,大大提高了不必要的花销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值