2016-07-06 33 views
0

我正在使用MongoDB中的地理空間數據並嘗試使用Incremental mapReduce查詢數據(我試圖找到彼此相交的區域)如何通過字符串數據(JSON)執行增量式mapReduce?

我的集合包含以下原型的文檔(在BBOX是經度和緯度):

{ 
"_id" : ObjectId("577be972e0977965a62e3264"), 
"value" : { 
    "Name" : "43456", 
    "type" : "zip", 
    "bbox" : [ 
     -82.856831, 
     41.62814, 
     -82.793069, 
     41.724549 
    ] 
} 
} 

在我的MapReduce代碼,我試圖找到其中有交集彼此的領域,這樣做我用「增量MapReduce的」。因此,我已經在reduce函數中定義了一個數組,並且我想將涉及攔截的所有區域都放在這個數組中。 (在映射函數中,我已經將所有集合放在一個文件[emit(1,this.value)]中,以便使用嵌套循環在它之間進行搜索)。

當我在MongoDB中運行此代碼時,reduce函數的輸出爲null。我猜測的是代碼的增量部分可能是錯誤的,但我仍然不確定。另一方面,如果確實是錯的,我不知道該如何解決。

這裏是我的MapReduce代碼:

var Mapper=function(){ 

var key=1; 
var value={ 
id: this._id, 
Name: this.value.Name, 
Type: this.value.type, 
Bbox: this.value.bbox 
}; 
emit (key, value); 
} 
var Reducer=function(key, val){ 

var reduceObj={ 
id:0, 
Name: 0, 
Type: 0, 
Bbox: 0}; 

for(var i=0; i<(val.lenght)-1; i++) 
{ for(var j=1; j<val.lenght; j++) 
{ 
if((val[i].Type=="zip") && (val[j].Type=="water")&& 
(((val[i].Bbox[0]==val[j]. Bbox[0] || val[i].Bbox[0]== val[j].Bbox[2] ||   val[i].Bbox[2] == val[j].Bbox[0] || val[i].Bbox[2] == val[j].Bbox[2])||(val[i].Bbox[0] <= val[j].Bbox[0] && val[i].Bbox[0] <= val[j].Bbox[2]) ||(val[i].Bbox[0] <= val[j].Bbox[0] && val[i].Bbox[0] <= val[j].Bbox[2]))&&((val[i].Bbox[1] == val[j].Bbox[1] || val[i].Bbox[1] == val[j].Bbox[3] || val[i].Bbox[3] == val[j].Bbox[1] || val[i].Bbox[3] == val[j].Bbox[3])||(val[i].Bbox[1] <= val[i].Bbox[1] && val[i].Bbox[1] <= val[j].Bbox[3]) ||(val[i].Bbox[1] <= val[j].Bbox[1] && val[i].Bbox[1] <= val[j].Bbox[3])))) 

{ 
reduceObj.id=val.id; 
reduceObj.Name=val.Name; 
reduceObj.Type=val.Type; 
reduceObj.Bbox=val.Bbox; 

} 

}} 
return reduceObj; 
} 
db.ALL.mapReduce(Mapper, Reducer, { 
out: "Intersects"}) 

我將非常感激,如果有人幫我

+0

的答案目前形式的問題可能很快就會被擱置。你應該重寫它,說明至少這段代碼出了什麼問題,以及期望的輸出是什麼。 –

+0

我編輯過它並添加了問題。對不起,感謝您的評論。 –

回答