我有一個MongoDB的集合與地理指標:計算距離MongoDB中的map-reduce
> db.coll.getIndexes()
[
// ...
{
"v" : 1,
"key" : {
"location" : "2dsphere"
},
"ns" : "test.coll",
"dropDups" : false,
"name" : "location_2dsphere",
"background" : false
}
]
db.coll.findOne({location: {'$exists': true}}, {'location': 1})
{
"_id" : ObjectId("52cd72ae2ac170aa3eaace6e"),
"location" : [
55.4545177559,
11.5767419669
]
}
在這我跑地圖降低,這看起來是這樣的:
var map = function() {
var value = 0;
// ... various calculations on the value here
var distance = 0; // < This is the problematic part
if (distance < 1000) {
val += distance; // for example
}
emit(this._id, value)
}
var reduce = function(id, val) {
return {id: val}
}
db.coll.mapReduce(map, reduce, {out: {inline: 1}})
是有一種方法來計算location
和X點之間的距離,在map函數中?
我正在尋找類似$geoNear的東西,但與map-reduce有某種結合。
例如:
db.runCommand({geoNear: "coll", near: [-74, 40.74], spherical: true})
返回每個文件的距離。但我找不到一種方法將其與map-reduce命令結合使用。
http://www.movable-type.co.uk/scripts/latlong.html – Andy
此外,你有什麼已經嘗試過? – Andy
在純js中做它並不是最理想的,因爲mongo已經支持距離計算... – yprez