数组条件查询,找到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
)