1
我們的MongoDB數據庫包含所有用戶帳戶的列表,其中每個新註冊在帳戶文檔中都有一個'created_at'字段,其中包含創建時的當前日期和時間。兩個看起來完全相同的MapReduce函數的令人費解的行爲
我們想知道有多少新註冊或每天有多少註冊,所以將MapReduce查詢放在一起以便爲我們找到。
db.accounts.mapReduce(
function() {
var date = this.created_at.toLocaleDateString();
emit(date, 1);
},
function(key, values) {
return values.length;
},
{ out: "output" })
我們的第一次嘗試是在上面。對於每個註冊,它在該日期發出值爲1
。然後使用每個陣列的長度來確定當天有多少個註冊。
然而,雖然結果大部分是正確的,但顯着的不準確。例如,當我們知道實際數字要高得多時,第一天給了我們兩位數的價值。儘管使用相同的數據,但在第二次運行地圖縮小功能後,某些值發生了變化。
我們改變了功能,而不是總結陣列的值(記住,應該只包括1
的,因此等同於array.length
。
db.accounts.mapReduce(
function() {
var date = this.created_at.toLocaleDateString();
emit(date, 1);
},
function(key, values) {
var sum = 0;
for(var i = 0; i < values.length; i++) {
sum += values[i];
};
return sum;
},
{ out: "output" })
出乎我們的意料,這給了正確的結果對於錯了之前每次約會。
有誰知道爲什麼第一個地圖減少沒有經營如預期?
噢,當然!知道這將是一件令人尷尬的事情。 TA! – Dave