Sam*_*gol 1 javascript mapreduce mongodb meteor
我目前正在研究GeoSpatial项目,我使用MongoDB作为数据库,Meteor用于创建我的应用程序.我在MongoDB中对空间数据运行了一些查询(使用mapReduce),我想把这个代码(查询)放在Meteor(javascript文件)上.我做了一些研究但仍然有问题.我不知道如何在流星中编写mapReduce函数.
这是我在MongoDB中的mapReduce代码:
var map1 = function() {
var px =-83.215;
var py =41.53;
if(this.geometry.minlon<=px && px<=this.geometry.maxlon && this.geometry.minlat<=py && py<=this.geometry.maxlat)
{emit(this._id, 1);}
}
var reduce1 = function(key, value) {
return Array.sum(value)
}
db.C1DB.mapReduce(map1, reduce1, {
out: "CollectionName"
})
Run Code Online (Sandbox Code Playgroud)
基本上你可以用两种类似的方式做到:
使用上面评论中提到的包.
或者使用提到包使用的Raw Collection API.
这是一个工作示例如何在没有包的情况下执行此操作:
C1DB = new Mongo.Collection('c1db');
CollectionName = new Mongo.Collection('CollectionName');
Meteor.methods({
doMapReduce: function () {
var mapFn = function () {
var px = -83.215;
var py = 41.53;
if (this.geometry.minlon <= px && px <= this.geometry.maxlon && this.geometry.minlat <= py && py <= this.geometry.maxlat) {
emit(this._id, 1);
}
};
var reduceFn = function (key, value) {
return Array.sum(value)
};
var rawC1DB = C1DB.rawCollection();
// convert mapReduce to synchronous function
var syncMapReduce = Meteor.wrapAsync(rawC1DB.mapReduce, rawC1DB);
// CollectionName will be overwritten after each mapReduce call
syncMapReduce(mapFn, reduceFn, {
out: "CollectionName"
});
return CollectionName.find({}).fetch();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1349 次 |
| 最近记录: |