2010-12-17 74 views
0

給定一個排序後的查詢,在mapReduce或甚至find($ where)過程中引用相對對象是否可能?在MongoDB中引用相對對象

例如鑑於

[ 
{ 'name' : 'bill', 
    'age' : 20 } 
, 
{ 'name' : 'bill', 
    'age' : 25 } 
] 

find({$where: 'this.age > previousItem.age'}) 

將剛剛返回:

{ 'name' : 'bill', 
    'age' : 25 } 

回答

0

您沒有訪問光標在地圖,減少背景下,所以沒有辦法可以「記住」什麼以前的文件了。在map-reduce中,每個文檔被隔離處理

原因是map-reduce可以在多個碎片上並行運行,從而獲得更好的性能。未來,多線程地圖縮減作業也可能會受到支持。在這些場景中,並不存在真正的「前一個項目」,因爲您正在同時處理多個部分的集合。它可以是當前線程中的前一個項目,當前分片中的前一個項目或所有分片中的前一個項目。

關於您的示例,如果您已對age排序查詢,則以前處理的所有文檔的年齡都小於或等於當前項目的年齡。所有未處理的項目的年齡都大於或等於當前項目的年齡。您可以使用find()來檢索這些項目,但我不會推薦它,因爲它可能會影響性能。此外,您只能訪問當前的項目,而不是您在示例中嘗試執行的前一項目。

我認爲你誤解了map-reduce的概念。 你想要達到什麼目的?