2014-04-29 35 views
1

我有這個服務器端JS腳本:爲什麼這個MongoDB循環執行的次數比預期的多?

// Run processNames on all rows in cities 
var cur = db.cities.find(); 
cur.immortal = true; 
var j = 0; 
var total = cur.count(); 
cur.forEach(function(obj) { 
    processNames(obj); 
    if (j % 100000 === 0) { 
     print(j + "/" + total + " cities processed"); 
    } 
    j++; 
}); 
print("Completed load: " + j + " cities processed"); 

在輸出中,我看到:

... 
4800000/3411205 cities processed 
4900000/3411205 cities processed 
5000000/3411205 cities processed 
5100000/3411205 cities processed 
5200000/3411205 cities processed 
5300000/3411205 cities processed 
5400000/3411205 cities processed 
5500000/3411205 cities processed 

這怎麼可能發生?遊標僅返回3411205個文檔,但forEach循環正在執行超過500萬次。這是怎麼回事?

回答

1

我想你修改了文件processNames()的方法,導致MongoDB重定位文件。您可以使用snapshot()來解決此問題。

var cur = db.cities.find().snapshot();

相關問題