MongoDB指令实践

来源:互联网 发布:2017年淘宝搜索规则 编辑:程序博客网 时间:2024/05/31 18:55
学一门技术,得先知道它有什么东西,从整体上有个把握,然后再去学,就能跟整体上的东西一一对应,所以我们要看官网
https://docs.mongodb.com/manual/reference/operator/aggregation/skip/

insert
db.chenhao.insert({id:1,name:"chenhao2",date:"19920221"})   连续输入此指令使插入十条

aggregate    
1)project    不改变表格的实际内容,只显示出想要显示的字段
db.chenhao.aggregate({$project:{id:1,name:1}})    只显示两个字段,id和name,但会默认显示索引 id值

db.chenhao.aggregate({$project:{_id:0,newid:{$add:["$id",10]}}})    把id值+10然后显示到newid栏里面,不会改变原集合的值
db.chenhao.aggregate({$project:{id:1,name:1,value:{param1:"$id",param2:"$id",param3:"$id",param4:{$add:["$id",10]}}}})    
随心所欲的显示,为1表示显示,如果查询条件为1,但实际集合没有这个字段,实际查询结果中不会显示

2)match过滤操作 
db.chenhao.aggregate({$match:{id:1}})

db.chenhao.aggregate({$match:{id:1}},{$limit:5})    同级操作,如match,limit等都应该在各自的大括号里面
如果按照管道的思想,这句话的效果是先查询出所有id为1的数据,然后再进行分片限制值显示5条

db.chenhao.aggregate({$match:{id:1}},{$limit:5},{$skip:1})    如果在分片后跳过1个那么只会显示4条,可以验证管道思想

Group
插入:
    for(var i=1; i<20; i++){ var num=i%6; db.ch.insert({_id:i,name:"user_"+i,age:num}); }    循环插入20条数据,这个比前面高端很多了

分组:这两种方式都可以达到分组查询的效果
    db.ch.group({key:{age:true},initial:{num:0},$reduce:function(doc,prev){prev.num++}})
    db.runCommand({group:{ns:"ch",key:{age:true},initial:{num:0},$reduce:function(doc,prev){prev.num++}}})

    筛选后再分组
     db.ch.group({ key:{age:true}, initial:{num:0}, $reduce:function(doc,prev) { prev.num++ }, condition:{age:{$gt:2}} });

    普通where查询
    db.ch.find({$where:function(){ return this.age>2; } });

    group联合where查询
    db.ch.group({key:{age:true},initial:{num:0},$reduce:function(doc,prev){prev.num++},condition:{$where:function(){return this.age>2;}}})
    condition里面的内容是优先于$reduce执行的

    使用函数返回值分组db.ch.group({ $keyf:function(doc){return {age:doc.age};}, initial:{num:0}, $reduce:function(doc,prev){ prev.num++ } });
    结果跟前面第一个分组查询是一样的

    使用终结器,效果还是分组查询,但在多了一个终结器部分,这个终结器的效果是完成查询后,增加count字段,值跟num字段相同,并删除num字段
    db.ch.group({ $keyf:function(doc){return {age:doc.age};}, initial:{num:0}, $reduce:function(doc,prev){ prev.num++ }, finalize: function(doc){ doc.count=doc.num;delete doc.num; } });


0 0
原创粉丝点击