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"})
我將非常感激,如果有人幫我
的答案目前形式的問題可能很快就會被擱置。你應該重寫它,說明至少這段代碼出了什麼問題,以及期望的輸出是什麼。 –
我編輯過它並添加了問題。對不起,感謝您的評論。 –