MongoDB 查询2

数组条件查询,找到2012年和2017年的电影

只要country数组中有中国或日本的一个就表示匹配成功,返回整个文档

数组元素的增加,使用update和push,向数组中加入新元素,可以加入重复值

db.stu.update(
    {'name':'aaa'},
    {$push:{
         'score':5
        }}
)

使用update和addToSet 向数组中加入元素,如果该元素存在,则不会加入进去

db.stu.update(
    {name:'aaa'},
    {$addToSet:{
        score:4
        }}
)

查询电影标签数组中,元素属性含有name值为动画的电影

使用$push,将各个分段的电影名称显示出来

查找含有动画标签的电影数目

查询两个属性数组中含有动画的电影数目,使用or

多重分组查询,查询每年的不同评分电影数目,使用mapReduce

使用聚合函数aggregate,速度比mapReduce快很多,但缺少定制化,比如无法处理字段缺失问题

使用mapRedduce 计算各个分段的电影数目,默认汇总字段使用value

使用aggregate达到同样的效果,但效率更高,速度更快

  • 计算每个用户2016-06-01这天的消费金额,先查找在该日期有消费的记录,然后用用户id作为分组的key,花费作为values,输入到reduce中进行汇总
db.consume.mapReduce(
    function(){ emit( this.user_id,this.price ) },
    function(key,values){ 
      var total = 0 ;
      for(var i=0;i<values.length;i++){
        total += values[i];
      }
       return total;
    },//end reduce function
    {
        query:{"date":"2016-06-01"}
    }
)


 

多条件分组,将consume集合内的数据按照每天每个客户汇总金额

var mapfunction = function(){
    emit( {this.date, this.user_id},this.price} )
}

var reducefunction = function(key,values){ 
      var total = 0 ;
      for(var i=0;i<values.length;i++){
        total += values[i];
      }
      return total;
 }

db.consume.mapReduce(
    mapfunction,
    reducefunction
)


 

猜你喜欢

转载自my.oschina.net/ahaoboy/blog/1621825