Mongo v2.0起,限制返回的数据大小不能超过16M, 之前是不能超过4M。
uv统计过程中,日志中发现超过16M限制的报错。
最近, 找到了一个好的方法, 就是存在临时集合中,
还是拿上一次的东西来举例,link_page.js脚本代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
map = function() { var day = this.time.getFullYear() + '-' + (this.time.getMonth()+1) + '-' + this.time.getDate(); emit(day, 1); } reduce = function(key, values) { return Array.sum(values); } var result = db.link_page.mapReduce(map, reduce, {query: {page_id: {$in:['414']}}, out:{inline:1} }); printjson(result); |
运行结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
{ "results" : [ { "_id" : "2015-6-30", "value" : 45 }, { "_id" : "2015-6-31", "value" : 11 }, { "_id" : "2015-7-11", "value" : 1 }, { "_id" : "2015-7-12", "value" : 27 }, { "_id" : "2015-7-13", "value" : 3 }, { "_id" : "2015-7-14", "value" : 7 }, { "_id" : "2015-7-17", "value" : 2 }, { "_id" : "2015-7-18", "value" : 44 }, { "_id" : "2015-7-19", "value" : 34 }, { "_id" : "2015-7-20", "value" : 54 }, { "_id" : "2015-7-21", "value" : 162 }, { "_id" : "2015-7-22", "value" : 74 }, { "_id" : "2015-7-23", "value" : 44 }, { "_id" : "2015-7-24", "value" : 58 }, { "_id" : "2015-7-25", "value" : 42 }, { "_id" : "2015-7-27", "value" : 1 }, { "_id" : "2015-7-28", "value" : 1 }, { "_id" : "2015-7-3", "value" : 2 }, { "_id" : "2015-7-4", "value" : 14 }, { "_id" : "2015-7-5", "value" : 7 }, { "_id" : "2015-7-6", "value" : 4 }, { "_id" : "2015-7-7", "value" : 14 }, { "_id" : "2015-7-8", "value" : 6 } ], "timeMillis" : 21, "counts" : { "input" : 657, "emit" : 657, "reduce" : 25, "output" : 23 }, "ok" : 1, } |
有没有发现问题,这个结果中,pv,uv是空的没有统计。这个问题,后续在讨论。