我正在制作一个小型MeteorJS应用程序,该应用程序根据受欢迎的工作区域在地图上绘制点。
我有这个:
Template.list.jobs = function() {
if(Session.get('currentIndustryOnet')) {
jobs = Jobs.find({onet: Session.get('currentIndustryOnet')}).fetch();
// Session.set('jobCount', jobs.count());
var cnt = _.groupBy(jobs, 'address');
console.log(cnt);
return Pagination.collection(jobs);
} else {
jobs = Jobs.find()
Session.set('jobCount', jobs.count());
return Pagination.collection(jobs.fetch());
}
}
cnt
变量返回一个正确分组的数组(数组的键是Allentown, PA
之类的地址)。我有一系列在美国有过城市的城市以及他们的LAT / LONG在Google地图上绘制。因此,我将从分组数组中取出前100名,在Cities集合中找到lat / long并在地图上绘制这些点。
我不熟悉使用groupedBy
方法根据长度对列表进行排序,然后拔出要用作搜索的密钥。
答案 0 :(得分:1)
我不是百分之百确定数据结构...但假设作业有一个address
字段,并且您希望它们按出现频率和上限排序,您可以这样做:
var addresses = _.chain(jobs)
.countBy('address')
.pairs()
.sortBy(function(j) {return -j[1];})
.map(function(j) {return j[0];})
.first(100)
.value();
注意可能有一种更聪明的方法来使用下划线来得出这个结果。一旦你有了有上限的,排序的地址列表,你可以通过如下的查找得到纬度/经度值:
Cities.find({address: {$in: addresses}}).fetch();