轉自:
http://guudo.cn/tech/view/id/14294
-
當某天只有一條記錄:該記錄就不走reduce ,直接出來,你得到的value就只有一個userId字符串,其他啥也沒有。pv,uv 自然也沒有。所以 你在emit 應該初始化{pv:1,uv:1,userIds:this.userId}
-
當某天記錄特別多,超過100條的emit,mongo比較缺德的是,它會把這100的reduce的結果重新自動emit,所以這裏把map中emit的對象結構和reduce的return返回的對象結構寫成一致的原因。同一個key , 當每超過100個 emit,結果就會從新emit,所以這個結果的pv uv 是無效的,這裏只會用到重新emit的userIds,然後在繼續在reduce進行統計。
這兩個點是mongo mapreduce 比較坑爹的地方。注意這兩點其他都OK了